diff options
author | Thomas F. K. Jorna <[email protected]> | 2021-09-21 21:00:21 +0200 |
---|---|---|
committer | Thomas F. K. Jorna <[email protected]> | 2021-09-21 21:00:21 +0200 |
commit | 075d3831ffae63f128bcaabf9fc5e70ade41ad33 (patch) | |
tree | 79495b8cd6f6fe2bcb67bbaf3cac6811fc70e1b1 /components/TagPanel.tsx | |
parent | cffebb920e7b29985fa90979dbdb56f795980f41 (diff) |
chore: separated out all tweak panels
Diffstat (limited to 'components/TagPanel.tsx')
-rw-r--r-- | components/TagPanel.tsx | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/components/TagPanel.tsx b/components/TagPanel.tsx new file mode 100644 index 0000000..545102b --- /dev/null +++ b/components/TagPanel.tsx @@ -0,0 +1,59 @@ +import { CUIAutoComplete } from 'chakra-ui-autocomplete' +import React, { useState } from 'react' +import { initialFilter } from './config' + +export interface TagPanelProps { + tags: string[] + filter: typeof initialFilter + setFilter: any + highlightColor: string + mode: string +} + +export const TagPanel = (props: TagPanelProps) => { + const { filter, setFilter, tags, highlightColor, mode } = props + const tagArray = tags.map((tag) => { + return { value: tag, label: tag } + }) + + const currentTags = mode === 'blacklist' ? 'tagsBlacklist' : 'tagsWhitelist' + const [selectedItems, setSelectedItems] = useState<typeof tagArray>( + filter[currentTags].map((tag) => { + return { value: tag, label: tag } + }), + ) + + return ( + <CUIAutoComplete + items={tagArray} + label={'Add tag to ' + mode} + placeholder=" " + onCreateItem={(item) => null} + disableCreateItem={true} + selectedItems={selectedItems} + onSelectedItemsChange={(changes) => { + if (changes.selectedItems) { + setSelectedItems(changes.selectedItems) + setFilter({ ...filter, [currentTags]: changes.selectedItems.map((item) => item.value) }) + } + }} + listItemStyleProps={{ overflow: 'hidden' }} + highlightItemBg="gray.400" + toggleButtonStyleProps={{ variant: 'outline' }} + inputStyleProps={{ + focusBorderColor: highlightColor, + color: 'gray.800', + borderColor: 'gray.600', + }} + tagStyleProps={{ + rounded: 'full', + bg: highlightColor, + height: 8, + paddingLeft: 4, + fontWeight: 'bold', + }} + hideToggleButton + itemRenderer={(selected) => selected.label} + /> + ) +} |