import { useDispatch, useSelect } from '@wordpress/data' import { __ } from '@wordpress/i18n' import { store, store_name } from '../../../store/backend' import { Form } from '../../components/Form/Form' import { createFormFromModel } from '../../components/Form/lib/createForm' import { createFormMenuSectionsFromModel } from '../../components/Form/utils/utils' import { useSidebar } from '../../components/Sidebar/SidebarContext' import { getCellActions } from '../../components/WebbaDataTable/helpers/getCellActions' import { useWbkTable } from '../../components/WebbaDataTable/hooks/useWbkTable' import { Menu } from '../../components/WebbaDataTable/Menu' import { Table } from '../../components/WebbaDataTable/Table' import { generateColumnDefsFromModel } from '../../components/WebbaDataTable/utils' import { locationsModel } from './model' import './LocationsScreen.scss' import { SuccessMessage } from '../../components/SuccessMessage/SuccessMessage' import { FailedMessage } from '../../components/FailedMessage/FailedMessage' import { isForbidden } from '../../utils/errors' import { ProFeatuerWrapper } from '../../components/ProFeatuerWrapper/ProFeatuerWrapper' export const LocationsScreen = () => { const { plugin_url, settings, staff_members, services, plan_map } = useSelect( // @ts-ignore (select) => select(store_name).getPreset(), [] ) const isProPlan = plan_map && ['premium', 'pro'].some((plan) => plan_map[plan] === true) const columns = generateColumnDefsFromModel(locationsModel, {}, { services: { header: __('Services', 'webba-booking-lite'), cell: ({ cell }) => services && services.filter(({ locations }: any) => locations?.length > 0 && locations.includes(cell.row.original.id)).map(({ label }: any) => label).join(', ') }, staff_members: { header: __('Staff members', 'webba-booking-lite'), cell: ({ cell }) => staff_members && staff_members.filter(({ locations }: any) => locations?.length > 0 && locations.includes(Number(cell.row.original.id))).map(({ label }: any) => label).join(', ') } }) const form = createFormFromModel(locationsModel) const formSections = createFormMenuSectionsFromModel({ model: locationsModel, form, modelName: 'locations', }) const { deleteItems, addItem, setToastNotification } = useDispatch(store) const { locations, isLoading } = useSelect( (select) => ({ locations: select(store).getItems('locations'), isLoading: select(store).getLoading(), }), [] ) const sidebar = useSidebar() const table = useWbkTable({ columns, data: locations, selectable: true, isAdmin: settings?.is_admin, renderMenu: ({ cell }) => { const { onDelete, onDuplicate, onSubmit } = getCellActions({ cell, collectionName: 'locations', }) return (