import classNames from 'classnames' import { atom, useRecoilState } from 'recoil' import { localStorageRecoilEffect } from '~/utils/localStorage' import DropdownMenu from '~/components/DropdownMenu' import IconCheck from '~/icons/compiled/Check' import IconCaretDown from '~/icons/compiled/CaretDown' // We used to have different view modes per environment. // This merges them while keeping users' prior preference. function mergedListViewMode() { const mode = localStorageRecoilEffect('actionsListViewMode') const liveMode = localStorageRecoilEffect('publishedActionsViewMode') const devMode = localStorageRecoilEffect('consoleActionsViewMode') return mode || devMode || liveMode } export const actionsListViewMode = atom<'list' | 'grid'>({ key: 'actionsListViewMode', default: 'list', effects: [mergedListViewMode()], }) export interface ListViewToggleProps { value: 'list' | 'grid' onChange: (value: 'list' | 'grid') => void } export default function ListViewToggle() { const [viewMode, setViewMode] = useRecoilState(actionsListViewMode) return ( View as list ), onClick: () => { setViewMode('list') }, }, { label: ( View as grid ), onClick: () => { setViewMode('grid') }, }, ]} // `modal` mode prevents menu from interfering with table overflow behavior modal > View as: {viewMode === 'list' ? 'List' : 'Grid'} ) }