Skip to content

Commit

Permalink
Drop dynamic column toggles
Browse files Browse the repository at this point in the history
  • Loading branch information
Droniu committed Jul 6, 2023
1 parent 4433a94 commit 3f53e14
Show file tree
Hide file tree
Showing 14 changed files with 145 additions and 299 deletions.
2 changes: 1 addition & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"@typescript-eslint/ban-ts-comment": "warn",
"@typescript-eslint/ban-types": "warn",
"@typescript-eslint/consistent-type-assertions": "warn",
"@typescript-eslint/explicit-function-return-type": "warn",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/naming-convention": "warn",
"@typescript-eslint/no-base-to-string": "warn",
"@typescript-eslint/no-dynamic-delete": "warn",
Expand Down
29 changes: 7 additions & 22 deletions src/components/Datagrid/ColumnPicker/ColumnPicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,19 @@ export interface ColumnPickerProps {
dynamicColumns?: AvailableColumn[];
selectedColumns: string[];
columnCategories?: ColumnCategory[];
columnPickerSettings?: string[];
onSave: (columns: string[]) => void;
onDynamicColumnSelect?: (columns: string[]) => void;
onToggle: (columnId: string) => void;
}

export const ColumnPicker = ({
staticColumns,
selectedColumns,
columnCategories,
dynamicColumns,
columnPickerSettings,
onDynamicColumnSelect,
onSave,
onToggle,
}: ColumnPickerProps) => {
const [pickerOpen, setPickerOpen] = useState(false);
const [expanded, setExpanded] = useState(false);

const renderCategories =
columnCategories &&
typeof onDynamicColumnSelect === "function" &&
columnPickerSettings;

const handleToggle = (id: string) =>
selectedColumns.includes(id)
? onSave(selectedColumns.filter(currentId => currentId !== id))
: onSave([...selectedColumns, id]);

return (
<Popover
modal
Expand Down Expand Up @@ -79,11 +65,11 @@ export const ColumnPicker = ({
gridTemplateColumns={expanded ? 2 : 1}
overflow="hidden"
>
{expanded && renderCategories && (
{expanded && columnCategories && (
<ColumnPickerCategories
columnCategories={columnCategories}
columnPickerSettings={columnPickerSettings}
onDynamicColumnSelect={onDynamicColumnSelect}
selectedColumns={selectedColumns}
onToggle={onToggle}
onClose={() => setExpanded(false)}
/>
)}
Expand All @@ -102,15 +88,14 @@ export const ColumnPicker = ({
</Box>
<ColumnPickerStaticColumns
staticColumns={staticColumns}
handleToggle={handleToggle}
handleToggle={onToggle}
selectedColumns={selectedColumns}
/>
{columnCategories && (
<ColumnPickerDynamicColumns
dynamicColumns={dynamicColumns}
selectedColumns={selectedColumns}
setExpanded={setExpanded}
handleToggle={handleToggle}
onToggle={onToggle}
/>
)}
</Box>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ import { ColumnCategory } from "./useColumns";

export interface ColumnPickerAvailableNodesProps {
currentCategory: ColumnCategory;
columnPickerSettings: string[];
selectedColumns: string[];
query: string;
setQuery: React.Dispatch<React.SetStateAction<string>>;
changeHandler: (column: string) => void;
onToggle: (column: string) => void;
}

export const ColumnPickerAvailableNodes = ({
currentCategory,
columnPickerSettings,
selectedColumns,
query,
setQuery,
changeHandler,
onToggle,
}: ColumnPickerAvailableNodesProps) => {
const areNodesLoading = currentCategory.availableNodes === undefined;
const areNodesEmpty = currentCategory.availableNodes?.length === 0;
Expand Down Expand Up @@ -51,8 +51,8 @@ export const ColumnPickerAvailableNodes = ({
return currentCategory.availableNodes!.map(node => (
<Box padding={2} key={node.id}>
<Checkbox
onCheckedChange={() => changeHandler(node.id)}
checked={columnPickerSettings.includes(node.id)}
onCheckedChange={() => onToggle(node.id)}
checked={selectedColumns.includes(node.id)}
data-test-id={`search-dynamic-${node.id}`}
>
<Text size="small" color="textNeutralSubdued" ellipsis>
Expand Down
19 changes: 6 additions & 13 deletions src/components/Datagrid/ColumnPicker/ColumnPickerCategories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,21 @@ import { getExitIcon, getExitOnClick } from "./utils";

export interface ColumnPickerCategoriesProps {
columnCategories: ColumnCategory[];
columnPickerSettings: string[];
selectedColumns: string[];
onClose: () => void;
onDynamicColumnSelect: (columns: string[]) => void;
onToggle: (columnId: string) => void;
}

export const ColumnPickerCategories = ({
columnCategories,
onClose,
onDynamicColumnSelect,
columnPickerSettings,
onToggle,
selectedColumns,
}: ColumnPickerCategoriesProps) => {
const { currentCategory, setCurrentCategory } =
useCategorySelection(columnCategories);
const { query, setQuery } = useAvailableColumnsQuery(currentCategory);

const changeHandler = (column: string) =>
columnPickerSettings.includes(column)
? onDynamicColumnSelect(
columnPickerSettings.filter(currentCol => currentCol !== column),
)
: onDynamicColumnSelect([...columnPickerSettings, column]);

return (
<Box
backgroundColor="subdued"
Expand Down Expand Up @@ -73,10 +66,10 @@ export const ColumnPickerCategories = ({
{currentCategory ? (
<ColumnPickerAvailableNodes
currentCategory={currentCategory}
columnPickerSettings={columnPickerSettings}
selectedColumns={selectedColumns}
query={query}
setQuery={setQuery}
changeHandler={changeHandler}
onToggle={onToggle}
/>
) : (
<ColumnPickerCategoryList
Expand Down
68 changes: 47 additions & 21 deletions src/components/Datagrid/ColumnPicker/ColumnPickerDynamicColumns.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Box, Button, PlusIcon, Text, Toggle } from "@saleor/macaw-ui/next";
import { Box, Button, PlusIcon, Text } from "@saleor/macaw-ui/next";
import React from "react";
import { FormattedMessage } from "react-intl";

Expand All @@ -8,15 +8,13 @@ import messages from "./messages";
export interface ColumnPickerDynamicColumnsProps {
dynamicColumns: AvailableColumn[] | undefined;
setExpanded: (value: React.SetStateAction<boolean>) => void;
handleToggle: (id: string) => void;
selectedColumns: string[];
onToggle: (id: string) => void;
}

export const ColumnPickerDynamicColumns = ({
dynamicColumns,
setExpanded,
handleToggle,
selectedColumns,
onToggle,
}: ColumnPickerDynamicColumnsProps) => (
<Box data-test-id="dynamic-col-container">
<Box
Expand All @@ -37,24 +35,52 @@ export const ColumnPickerDynamicColumns = ({
/>
</Box>
{dynamicColumns?.map(column => (
<Box padding={1} key={column.id}>
<Toggle
onPressedChange={() => handleToggle(column.id)}
pressed={selectedColumns.includes(column.id)}
<Box
display="flex"
alignItems="center"
gap={2}
padding={1}
key={column.id}
>
<Button
onClick={() => onToggle(column.id)}
data-test-id={`dynamic-col-${column.id}`}
variant="secondary"
size="small"
// hacky for now, this icon should probably come from macaw
// although it's 8x8
icon={
<svg
viewBox="0 0 8 2"
width="8"
height="2"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0 1C0 0.447715 0.447715 0 1 0H7C7.55228 0 8 0.447715 8 1C8 1.55228 7.55228 2 7 2H1C0.447715 2 0 1.55228 0 1Z"
fill="currentColor"
/>
</svg>
}
// hacky again, because macaw button classes have high specificity
// and it's diffcult to override sizes
__height="16px"
__width="16px"
/>
<Text
variant="body"
size="small"
color="textNeutralSubdued"
whiteSpace="nowrap"
>
<Text
variant="body"
size="small"
color="textNeutralSubdued"
whiteSpace="nowrap"
>
{`${column.metaGroup} /`}
</Text>
<Text variant="body" size="small" color="textNeutralDefault" ellipsis>
{column.title}
</Text>
</Toggle>
{`${column.metaGroup} /`}
</Text>
<Text variant="body" size="small" color="textNeutralDefault" ellipsis>
{column.title}
</Text>
</Box>
))}
</Box>
Expand Down
39 changes: 0 additions & 39 deletions src/components/Datagrid/ColumnPicker/useColumnPickerSettings.ts

This file was deleted.

Loading

0 comments on commit 3f53e14

Please sign in to comment.