From b75598d879e1b9153d89a96f7b0f66ad8d641f71 Mon Sep 17 00:00:00 2001 From: "Thomas F. K. Jorna" Date: Mon, 11 Oct 2021 20:50:51 +0200 Subject: feat(preview): tag display and scroll fix --- components/TagMenu.tsx | 117 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 components/TagMenu.tsx (limited to 'components/TagMenu.tsx') diff --git a/components/TagMenu.tsx b/components/TagMenu.tsx new file mode 100644 index 0000000..432e9a2 --- /dev/null +++ b/components/TagMenu.tsx @@ -0,0 +1,117 @@ +import { MinusIcon, AddIcon, ViewOffIcon, ViewIcon } from '@chakra-ui/icons' +import { + Text, + Box, + Button, + Flex, + Menu, + MenuButton, + MenuItem, + MenuList, + Portal, + useDisclosure, +} from '@chakra-ui/react' +import React from 'react' +import { colorList, initialFilter, TagColors } from './config' +import { Collapse } from './Sidebar/Collapse' +import { ColorMenu } from './Tweaks/ColorMenu' + +export interface TagMenuProps { + setTagColors: any + tagColors: TagColors + setFilter: any + filter: typeof initialFilter + target: string | null +} + +export const TagMenu = (props: TagMenuProps) => { + const { setTagColors, setFilter, filter, tagColors, target } = props + const bl: string[] = filter.tagsBlacklist + const wl: string[] = filter.tagsWhitelist + const blacklist = bl.indexOf(target as string) > -1 + const whitelist = wl.indexOf(target as string) > -1 + const colors = useDisclosure() + return ( + <> + + } + closeOnSelect={false} + onClick={colors.onToggle} + > + Change color + + + + {colorList.map((color: string) => ( + + + setTagColors({ + ...tagColors, + [target as string]: color, + }) + } + bgColor={color} + m={1} + borderRadius="sm" + height={3} + width={3} + > + + ))} + + + {!whitelist && ( + { + if (!blacklist) { + setFilter((filter: typeof initialFilter) => ({ + ...filter, + tagsBlacklist: [...filter.tagsBlacklist, target], + })) + return + } + setFilter((filter: typeof initialFilter) => ({ + ...filter, + tagsBlacklist: filter.tagsBlacklist.filter((t) => t !== target), + })) + }} + icon={blacklist ? : } + > + {blacklist ? 'Remove from blacklist' : 'Add to blacklist'} + + )} + {!blacklist && ( + { + if (!whitelist) { + setFilter((filter: typeof initialFilter) => ({ + ...filter, + tagsWhitelist: [...filter.tagsWhitelist, target], + })) + return + } + setFilter((filter: typeof initialFilter) => ({ + ...filter, + tagsWhitelist: filter.tagsWhitelist.filter((t) => t !== target), + })) + }} + icon={whitelist ? : } + > + {whitelist ? 'Remove from whitelist' : 'Add to whitelist'} + + )} + + ) +} -- cgit v1.2.3