import { Box, Checkbox, CustomModalLayout, CustomModalLayoutProps, FormField, Input, Text, } from '@wix/design-system'; import React, { useState } from 'react'; import _ from 'lodash'; export type SettingsPreferences = { groupType?: 'views' | 'tabs'; filters?: boolean; dnd?: boolean; customColumns?: boolean; addNew?: boolean; bulkActions?: boolean; advancedSorting?: boolean; limit: number; initialError?: boolean; refreshError?: boolean; fetchNextPageError?: boolean; fetchTranslationsError?: boolean; }; export interface SettingsModalLayoutProps extends CustomModalLayoutProps { ok: (preferences: SettingsPreferences) => void; cancel: () => void; preferences: SettingsPreferences; } type SettingsKeys = keyof SettingsPreferences; type SupportedFeatures = { [key in SettingsKeys]: string | { key: string; value: string }[]; }; const features: SupportedFeatures = { initialError: '', refreshError: '', fetchNextPageError: '', fetchTranslationsError: '', groupType: [ { key: 'views', value: 'Views' }, { key: 'tabs', value: 'Tabs' }, ], addNew: 'Add New Item', bulkActions: 'Bulk Actions', customColumns: 'Custom Columns', dnd: 'Drag & Drop', filters: 'Filters', advancedSorting: 'Advanced Sorting', limit: 'Limit', }; export const SettingsModalLayout = (props: SettingsModalLayoutProps) => { const { ok, cancel, preferences: oldPreferences, ...rest } = props; const [preferences, setPreferences] = useState({ ...oldPreferences }); return ( { ok(preferences); }} secondaryButtonOnClick={() => cancel()} onCloseButtonClick={() => cancel()} secondaryButtonText="Cancel" title="Demo Settings" {...rest} > Features: {_.reduce( features, (acc, value, key) => { const feature = key as SettingsKeys; if (_.isArray(value)) { return _.concat( acc, value.map((option) => ( setPreferences({ ...preferences, [key]: preferences[feature] !== option.key ? option.key : undefined, }) } > {option.value} )), ); } if (typeof preferences[feature] === 'number') { acc.push( { const { value: newValue } = e.target; setPreferences({ ...preferences, [key]: newValue ? parseInt(newValue, 10) : 10, }); }} /> , ); return acc; } acc.push( setPreferences({ ...preferences, [key]: !preferences[feature], }) } > {value || _.startCase(key)} , ); return acc; }, [], )} ); };