From 227da64c9a56d516accc3a7618228d68604fabed Mon Sep 17 00:00:00 2001 From: thatmattlove Date: Sun, 19 Dec 2021 22:57:00 -0700 Subject: [PATCH] refactor and restructure ui components --- hyperglass/ui/components/debugger.tsx | 2 +- .../ui/components/directive-info-modal.tsx | 2 +- hyperglass/ui/components/footer/button.tsx | 2 +- .../ui/components/footer/color-mode.tsx | 2 +- hyperglass/ui/components/footer/footer.tsx | 2 +- hyperglass/ui/components/greeting.tsx | 2 +- hyperglass/ui/components/header/header.tsx | 2 +- hyperglass/ui/components/index.ts | 20 +++---- .../{layout/frame.tsx => layout.tsx} | 34 ++++++----- hyperglass/ui/components/layout/index.ts | 2 - hyperglass/ui/components/layout/layout.tsx | 19 ------ .../ui/components/looking-glass-form.tsx | 2 +- hyperglass/ui/components/output/fields.tsx | 2 +- .../ui/components/output/highlighted.tsx | 8 +-- hyperglass/ui/components/path/controls.tsx | 2 +- hyperglass/ui/components/path/path-button.tsx | 2 +- .../components/{layout => }/reset-button.tsx | 2 +- hyperglass/ui/components/resolved-target.tsx | 2 +- .../ui/components/results/copy-button.tsx | 2 +- hyperglass/ui/components/results/group.tsx | 2 +- hyperglass/ui/components/results/header.tsx | 2 +- .../ui/components/results/individual.tsx | 58 ++++++++++--------- .../ui/components/results/requery-button.tsx | 2 +- hyperglass/ui/components/results/tags.tsx | 2 +- hyperglass/ui/components/submit-button.tsx | 3 +- hyperglass/ui/components/table/main.tsx | 2 +- hyperglass/ui/components/user-ip.tsx | 3 +- .../ui/{components => elements}/animated.ts | 0 .../ui/{components => elements}/card/body.tsx | 0 .../{components => elements}/card/footer.tsx | 0 .../{components => elements}/card/header.tsx | 0 .../ui/{components => elements}/card/index.ts | 0 .../{components => elements}/code-block.tsx | 0 .../ui/{components => elements}/countdown.tsx | 0 .../ui/{components => elements}/custom.tsx | 0 .../{components => elements}/dynamic-icon.tsx | 0 .../ui/{components => elements}/favicon.tsx | 0 .../ui/{components => elements}/form-row.tsx | 0 hyperglass/ui/elements/index.ts | 21 +++++++ .../ui/{components => elements}/label.tsx | 0 .../{components => elements}/load-error.tsx | 2 +- .../ui/{components => elements}/loading.tsx | 2 +- .../markdown/elements.tsx | 2 +- .../markdown/index.ts | 0 .../markdown/markdown.tsx | 0 .../ui/{components => elements}/no-config.tsx | 0 hyperglass/ui/hooks/index.ts | 1 + hyperglass/ui/hooks/theme-hooks.ts | 34 +++++++++++ hyperglass/ui/pages/_app.tsx | 34 ++++++++++- hyperglass/ui/pages/_document.tsx | 2 +- hyperglass/ui/pages/index.tsx | 49 ++++++++-------- hyperglass/ui/tsconfig.json | 2 + hyperglass/ui/types/guards.ts | 2 +- 53 files changed, 200 insertions(+), 136 deletions(-) rename hyperglass/ui/components/{layout/frame.tsx => layout.tsx} (77%) delete mode 100644 hyperglass/ui/components/layout/index.ts delete mode 100644 hyperglass/ui/components/layout/layout.tsx rename hyperglass/ui/components/{layout => }/reset-button.tsx (96%) rename hyperglass/ui/{components => elements}/animated.ts (100%) rename hyperglass/ui/{components => elements}/card/body.tsx (100%) rename hyperglass/ui/{components => elements}/card/footer.tsx (100%) rename hyperglass/ui/{components => elements}/card/header.tsx (100%) rename hyperglass/ui/{components => elements}/card/index.ts (100%) rename hyperglass/ui/{components => elements}/code-block.tsx (100%) rename hyperglass/ui/{components => elements}/countdown.tsx (100%) rename hyperglass/ui/{components => elements}/custom.tsx (100%) rename hyperglass/ui/{components => elements}/dynamic-icon.tsx (100%) rename hyperglass/ui/{components => elements}/favicon.tsx (100%) rename hyperglass/ui/{components => elements}/form-row.tsx (100%) create mode 100644 hyperglass/ui/elements/index.ts rename hyperglass/ui/{components => elements}/label.tsx (100%) rename hyperglass/ui/{components => elements}/load-error.tsx (98%) rename hyperglass/ui/{components => elements}/loading.tsx (82%) rename hyperglass/ui/{components => elements}/markdown/elements.tsx (98%) rename hyperglass/ui/{components => elements}/markdown/index.ts (100%) rename hyperglass/ui/{components => elements}/markdown/markdown.tsx (100%) rename hyperglass/ui/{components => elements}/no-config.tsx (100%) create mode 100644 hyperglass/ui/hooks/theme-hooks.ts diff --git a/hyperglass/ui/components/debugger.tsx b/hyperglass/ui/components/debugger.tsx index c4c91a8..89a3ba6 100644 --- a/hyperglass/ui/components/debugger.tsx +++ b/hyperglass/ui/components/debugger.tsx @@ -13,7 +13,7 @@ import { ModalCloseButton, } from '@chakra-ui/react'; import { useConfig, useColorValue, useBreakpointValue } from '~/context'; -import { CodeBlock, DynamicIcon } from '~/components'; +import { CodeBlock, DynamicIcon } from '~/elements'; import { useHyperglassConfig } from '~/hooks'; import type { UseDisclosureReturn } from '@chakra-ui/react'; diff --git a/hyperglass/ui/components/directive-info-modal.tsx b/hyperglass/ui/components/directive-info-modal.tsx index 3271696..aa3aa65 100644 --- a/hyperglass/ui/components/directive-info-modal.tsx +++ b/hyperglass/ui/components/directive-info-modal.tsx @@ -9,8 +9,8 @@ import { useDisclosure, ModalCloseButton, } from '@chakra-ui/react'; -import { DynamicIcon, Markdown } from '~/components'; import { useColorValue } from '~/context'; +import { DynamicIcon, Markdown } from '~/elements'; import type { ModalContentProps } from '@chakra-ui/react'; diff --git a/hyperglass/ui/components/footer/button.tsx b/hyperglass/ui/components/footer/button.tsx index fd747c1..b92bcbe 100644 --- a/hyperglass/ui/components/footer/button.tsx +++ b/hyperglass/ui/components/footer/button.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import { Button, Menu, MenuButton, MenuList } from '@chakra-ui/react'; -import { Markdown } from '~/components'; import { useColorValue, useBreakpointValue, useConfig } from '~/context'; +import { Markdown } from '~/elements'; import { useOpposingColor, useStrf } from '~/hooks'; import type { MenuListProps } from '@chakra-ui/react'; diff --git a/hyperglass/ui/components/footer/color-mode.tsx b/hyperglass/ui/components/footer/color-mode.tsx index 8644caf..dbc0c9c 100644 --- a/hyperglass/ui/components/footer/color-mode.tsx +++ b/hyperglass/ui/components/footer/color-mode.tsx @@ -1,8 +1,8 @@ import { forwardRef } from 'react'; import { Button, Tooltip } from '@chakra-ui/react'; import { Switch, Case } from 'react-if'; -import { DynamicIcon } from '~/components'; import { useColorMode, useColorValue, useBreakpointValue } from '~/context'; +import { DynamicIcon } from '~/elements'; import { useOpposingColor } from '~/hooks'; import type { ButtonProps } from '@chakra-ui/react'; diff --git a/hyperglass/ui/components/footer/footer.tsx b/hyperglass/ui/components/footer/footer.tsx index 2b1e3dc..60f4a82 100644 --- a/hyperglass/ui/components/footer/footer.tsx +++ b/hyperglass/ui/components/footer/footer.tsx @@ -1,8 +1,8 @@ import { useMemo } from 'react'; import { Flex, HStack, useToken } from '@chakra-ui/react'; import { If, Then } from 'react-if'; -import { DynamicIcon } from '~/components'; import { useConfig, useMobile, useColorValue, useBreakpointValue } from '~/context'; +import { DynamicIcon } from '~/elements'; import { useStrf } from '~/hooks'; import { FooterButton } from './button'; import { ColorModeToggle } from './color-mode'; diff --git a/hyperglass/ui/components/greeting.tsx b/hyperglass/ui/components/greeting.tsx index b34bf3e..959d206 100644 --- a/hyperglass/ui/components/greeting.tsx +++ b/hyperglass/ui/components/greeting.tsx @@ -10,7 +10,7 @@ import { ModalCloseButton, } from '@chakra-ui/react'; import { If, Then } from 'react-if'; -import { Markdown } from '~/components'; +import { Markdown } from '~/elements'; import { useConfig, useColorValue } from '~/context'; import { useGreeting, useOpposingColor } from '~/hooks'; diff --git a/hyperglass/ui/components/header/header.tsx b/hyperglass/ui/components/header/header.tsx index 338bc95..2e408c6 100644 --- a/hyperglass/ui/components/header/header.tsx +++ b/hyperglass/ui/components/header/header.tsx @@ -1,6 +1,6 @@ import { Flex, ScaleFade } from '@chakra-ui/react'; -import { motionChakra } from '~/components'; import { useBreakpointValue } from '~/context'; +import { motionChakra } from '~/elements'; import { useBooleanValue, useFormInteractive } from '~/hooks'; import { Title } from './title'; diff --git a/hyperglass/ui/components/index.ts b/hyperglass/ui/components/index.ts index 3358af0..6c0f318 100644 --- a/hyperglass/ui/components/index.ts +++ b/hyperglass/ui/components/index.ts @@ -1,24 +1,19 @@ -export * from './animated'; -export * from './card'; -export * from './code-block'; -export * from './countdown'; -export * from './custom'; +/** + * The components directory contains React components that handle logic. + * + * Generally, components that call hooks or reference configuration, or API types should be in + * components. + */ + export * from './debugger'; export * from './directive-info-modal'; -export * from './dynamic-icon'; -export * from './favicon'; export * from './footer'; export * from './form-field'; -export * from './form-row'; export * from './greeting'; export * from './header'; -export * from './label'; export * from './layout'; -export * from './load-error'; -export * from './loading'; export * from './location-card'; export * from './looking-glass-form'; -export * from './markdown'; export * from './meta'; export * from './output'; export * from './path'; @@ -26,6 +21,7 @@ export * from './prompt'; export * from './query-location'; export * from './query-target'; export * from './query-type'; +export * from './reset-button'; export * from './resolved-target'; export * from './results'; export * from './select'; diff --git a/hyperglass/ui/components/layout/frame.tsx b/hyperglass/ui/components/layout.tsx similarity index 77% rename from hyperglass/ui/components/layout/frame.tsx rename to hyperglass/ui/components/layout.tsx index 1014cb0..c90d307 100644 --- a/hyperglass/ui/components/layout/frame.tsx +++ b/hyperglass/ui/components/layout.tsx @@ -1,18 +1,29 @@ import { useCallback, useRef } from 'react'; import { Flex } from '@chakra-ui/react'; -import { motion } from 'framer-motion'; import { isSafari } from 'react-device-detect'; import { If, Then } from 'react-if'; -import { Debugger, Greeting, Footer, Header } from '~/components'; +import { Debugger, Greeting, Footer, Header, ResetButton } from '~/components'; import { useConfig } from '~/context'; +import { motionChakra } from '~/elements'; import { useFormState } from '~/hooks'; -import { ResetButton } from './reset-button'; import type { FlexProps } from '@chakra-ui/react'; -const AnimatedFlex = motion(Flex); +const Main = motionChakra('main', { + baseStyle: { + px: 4, + py: 0, + w: '100%', + display: 'flex', + flex: '1 1 auto', + flexDir: 'column', + textAlign: 'center', + alignItems: 'center', + justifyContent: 'start', + }, +}); -export const Frame = (props: FlexProps): JSX.Element => { +export const Layout = (props: FlexProps): JSX.Element => { const { developerMode } = useConfig(); const { setStatus, reset } = useFormState( useCallback(({ setStatus, reset }) => ({ setStatus, reset }), []), @@ -42,24 +53,15 @@ export const Frame = (props: FlexProps): JSX.Element => { minHeight={isSafari ? '-webkit-fill-available' : '100vh'} >
- {props.children} - +