diff --git a/gui/rpk-gui/src/lib/crud/components/crud-form.tsx b/gui/rpk-gui/src/lib/crud/components/crud-form.tsx index ebb1e87..0a63776 100644 --- a/gui/rpk-gui/src/lib/crud/components/crud-form.tsx +++ b/gui/rpk-gui/src/lib/crud/components/crud-form.tsx @@ -7,11 +7,13 @@ import { useForm } from "@refinedev/core"; import CrudTextWidget from "./widgets/crud-text-widget"; import UnionEnumField from "./fields/union-enum"; import { CircularProgress } from "@mui/material"; +import { ResourceContext } from "../contexts/ResourceContext"; type CrudFormProps = { schemaName: string, uiSchema?: UiSchema, resource: string, + resourceBasePath?: string, id?: string, //onSubmit: (data: IChangeEvent, event: FormEvent) => void onSuccess?: (data: any) => void @@ -26,9 +28,9 @@ const customFields: RegistryFieldsType = { } export const CrudForm: React.FC = (props) => { - const { schemaName, uiSchema, resource, id, onSuccess } = props; + const { schemaName, uiSchema, resourceBasePath="" ,resource, id, onSuccess } = props; const { onFinish, query, formLoading } = useForm({ - resource: resource, + resource: `${resourceBasePath}/${resource}`, action: id === undefined ? "create" : "edit", redirect: "show", id, @@ -61,16 +63,18 @@ export const CrudForm: React.FC = (props) => { } return ( -
setFormData(e.formData)} - onSubmit={(e) => onFinish(e.formData)} - validator={validator} - omitExtraData={true} - widgets={customWidgets} - fields={customFields} - /> + + setFormData(e.formData)} + onSubmit={(e) => onFinish(e.formData)} + validator={validator} + omitExtraData={true} + widgets={customWidgets} + fields={customFields} + /> + ) } diff --git a/gui/rpk-gui/src/lib/crud/contexts/ResourceContext.tsx b/gui/rpk-gui/src/lib/crud/contexts/ResourceContext.tsx new file mode 100644 index 0000000..26b4036 --- /dev/null +++ b/gui/rpk-gui/src/lib/crud/contexts/ResourceContext.tsx @@ -0,0 +1,9 @@ +import React, { createContext, PropsWithChildren } from 'react'; + +type ResourceContextType = { + basePath: string, +} + +export const ResourceContext = createContext( + {} as ResourceContextType +); diff --git a/gui/rpk-gui/src/pages/firm/ContractRoutes.tsx b/gui/rpk-gui/src/pages/firm/ContractRoutes.tsx index 0573f1b..fb88227 100644 --- a/gui/rpk-gui/src/pages/firm/ContractRoutes.tsx +++ b/gui/rpk-gui/src/pages/firm/ContractRoutes.tsx @@ -1,6 +1,4 @@ import { Route, Routes } from "react-router"; -import React, { useContext } from "react"; -import { FirmContext } from "../../contexts/FirmContext"; import List from "./base-page/List"; import Edit from "./base-page/Edit"; import New from "./base-page/New"; @@ -21,19 +19,16 @@ export const ContractRoutes = () => { } const ListContract = () => { - const { currentFirm } = useContext(FirmContext); const columns = [ { field: "label", headerName: "Label", flex: 1 }, ]; - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts`} columns={columns} /> + return resource={`contracts`} columns={columns} /> } const EditContract = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts`} schemaName={"ContractUpdate"} /> + return resource={`contracts`} schemaName={"ContractUpdate"} /> } const CreateContract = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts`} schemaName={"ContractCreate"} /> + return resource={`contracts`} schemaName={"ContractCreate"} /> } diff --git a/gui/rpk-gui/src/pages/firm/DraftRoutes.tsx b/gui/rpk-gui/src/pages/firm/DraftRoutes.tsx index 7fd0ed2..42ca200 100644 --- a/gui/rpk-gui/src/pages/firm/DraftRoutes.tsx +++ b/gui/rpk-gui/src/pages/firm/DraftRoutes.tsx @@ -1,6 +1,4 @@ import { Route, Routes } from "react-router"; -import React, { useContext } from "react"; -import { FirmContext } from "../../contexts/FirmContext"; import List from "./base-page/List"; import Edit from "./base-page/Edit"; import New from "./base-page/New"; @@ -21,19 +19,16 @@ export const DraftRoutes = () => { } const ListDraft = () => { - const { currentFirm } = useContext(FirmContext); const columns = [ { field: "label", headerName: "Label", flex: 1 }, ]; - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts/drafts`} columns={columns} /> + return resource={`contracts/drafts`} columns={columns} /> } const EditDraft = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts/drafts`} schemaName={"ContractDraftUpdate"} /> + return resource={`contracts/drafts`} schemaName={"ContractDraftUpdate"} /> } const CreateDraft = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/contracts/drafts`} schemaName={"ContractDraftCreate"} /> + return resource={`contracts/drafts`} schemaName={"ContractDraftCreate"} /> } diff --git a/gui/rpk-gui/src/pages/firm/EntityRoutes.tsx b/gui/rpk-gui/src/pages/firm/EntityRoutes.tsx index 5303ded..c48b115 100644 --- a/gui/rpk-gui/src/pages/firm/EntityRoutes.tsx +++ b/gui/rpk-gui/src/pages/firm/EntityRoutes.tsx @@ -1,6 +1,4 @@ import { Route, Routes } from "react-router"; -import React, { useContext } from "react"; -import { FirmContext } from "../../contexts/FirmContext"; import List from "./base-page/List"; import Edit from "./base-page/Edit"; import New from "./base-page/New"; @@ -23,20 +21,17 @@ export const EntityRoutes = () => { } const ListEntity = () => { - const { currentFirm } = useContext(FirmContext); const columns = [ { field: "label", headerName: "Label", flex: 1 }, { field: "entity_data", headerName: "Type", flex: 1, valueFormatter: ({ type }: {type: string}) => type } ]; - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/entities`} columns={columns} /> + return resource={`entities`} columns={columns} /> } const EditEntity = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/entities`} schemaName={"EntityUpdate"} /> + return resource={`entities`} schemaName={"EntityUpdate"} /> } const CreateEntity = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/entities`} schemaName={"EntityCreate"} /> + return resource={`entities`} schemaName={"EntityCreate"} /> } diff --git a/gui/rpk-gui/src/pages/firm/ProvisionRoutes.tsx b/gui/rpk-gui/src/pages/firm/ProvisionRoutes.tsx index eb8f84f..a185688 100644 --- a/gui/rpk-gui/src/pages/firm/ProvisionRoutes.tsx +++ b/gui/rpk-gui/src/pages/firm/ProvisionRoutes.tsx @@ -1,6 +1,4 @@ import { Route, Routes } from "react-router"; -import React, { useContext } from "react"; -import { FirmContext } from "../../contexts/FirmContext"; import List from "./base-page/List"; import Edit from "./base-page/Edit"; import New from "./base-page/New"; @@ -22,19 +20,16 @@ export const ProvisionRoutes = () => { } const ListProvision = () => { - const { currentFirm } = useContext(FirmContext); const columns = [ { field: "label", headerName: "Label", flex: 1 }, ]; - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/provisions`} columns={columns} /> + return resource={`templates/provisions`} columns={columns} /> } const EditProvision = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/provisions`} schemaName={"ProvisionTemplateUpdate"} /> + return resource={`templates/provisions`} schemaName={"ProvisionTemplateUpdate"} /> } const CreateProvision = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/provisions`} schemaName={"ProvisionTemplateCreate"} /> + return resource={`templates/provisions`} schemaName={"ProvisionTemplateCreate"} /> } diff --git a/gui/rpk-gui/src/pages/firm/TemplateRoutes.tsx b/gui/rpk-gui/src/pages/firm/TemplateRoutes.tsx index 26b1570..27d5e81 100644 --- a/gui/rpk-gui/src/pages/firm/TemplateRoutes.tsx +++ b/gui/rpk-gui/src/pages/firm/TemplateRoutes.tsx @@ -1,6 +1,4 @@ import { Route, Routes } from "react-router"; -import React, { useContext } from "react"; -import { FirmContext } from "../../contexts/FirmContext"; import List from "./base-page/List"; import Edit from "./base-page/Edit"; import New from "./base-page/New"; @@ -21,19 +19,16 @@ export const TemplateRoutes = () => { } const ListTemplate = () => { - const { currentFirm } = useContext(FirmContext); const columns = [ { field: "label", headerName: "Label", flex: 1 }, ]; - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/contracts`} columns={columns} /> + return resource={`templates/contracts`} columns={columns} /> } const EditTemplate = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/contracts`} schemaName={"ContractTemplateUpdate"} /> + return resource={`templates/contracts`} schemaName={"ContractTemplateUpdate"} /> } const CreateTemplate = () => { - const { currentFirm } = useContext(FirmContext); - return resource={`firm/${currentFirm.instance}/${currentFirm.firm}/templates/contracts`} schemaName={"ContractTemplateCreate"} /> + return resource={`templates/contracts`} schemaName={"ContractTemplateCreate"} /> } diff --git a/gui/rpk-gui/src/pages/firm/base-page/Edit.tsx b/gui/rpk-gui/src/pages/firm/base-page/Edit.tsx index d557ce7..150e80e 100644 --- a/gui/rpk-gui/src/pages/firm/base-page/Edit.tsx +++ b/gui/rpk-gui/src/pages/firm/base-page/Edit.tsx @@ -1,6 +1,8 @@ import { CrudForm } from "../../../lib/crud/components/crud-form"; import { UiSchema } from "@rjsf/utils"; import { useParams } from "react-router"; +import { useContext } from "react"; +import { FirmContext } from "../../../contexts/FirmContext"; type EditProps = { resource: string, @@ -10,12 +12,15 @@ type EditProps = { const Edit = (props: EditProps) => { const { schemaName, resource, uiSchema } = props; + const { currentFirm } = useContext(FirmContext); + const resourceBasePath = `firm/${currentFirm.instance}/${currentFirm.firm}` const { record_id } = useParams(); return ( diff --git a/gui/rpk-gui/src/pages/firm/base-page/List.tsx b/gui/rpk-gui/src/pages/firm/base-page/List.tsx index 957a868..47b2261 100644 --- a/gui/rpk-gui/src/pages/firm/base-page/List.tsx +++ b/gui/rpk-gui/src/pages/firm/base-page/List.tsx @@ -2,8 +2,9 @@ import { UiSchema } from "@rjsf/utils"; import { List as RefineList, useDataGrid } from "@refinedev/mui"; import { DataGrid, GridColDef, GridValidRowModel } from "@mui/x-data-grid"; import { Link, useNavigate } from "react-router" -import React from "react"; +import React, { useContext } from "react"; import { Button } from "@mui/material"; +import { FirmContext } from "../../../contexts/FirmContext"; type ListProps = { resource: string, @@ -13,8 +14,11 @@ type ListProps = { } const List = (props: ListProps) => { - const { schemaName, resource, uiSchema, columns } = props; - const { dataGridProps } = useDataGrid({resource: resource}); + const { resource, columns } = props; + const { currentFirm } = useContext(FirmContext); + const resourceBasePath = `firm/${currentFirm.instance}/${currentFirm.firm}` + + const { dataGridProps } = useDataGrid({resource: `${resourceBasePath}/${resource}`}); const navigate = useNavigate(); const cols = React.useMemo[]>( diff --git a/gui/rpk-gui/src/pages/firm/base-page/New.tsx b/gui/rpk-gui/src/pages/firm/base-page/New.tsx index 1c855c4..7873e7e 100644 --- a/gui/rpk-gui/src/pages/firm/base-page/New.tsx +++ b/gui/rpk-gui/src/pages/firm/base-page/New.tsx @@ -1,5 +1,7 @@ import { CrudForm } from "../../../lib/crud/components/crud-form"; import { UiSchema } from "@rjsf/utils"; +import { useContext } from "react"; +import { FirmContext } from "../../../contexts/FirmContext"; type NewProps = { resource: string, @@ -9,11 +11,14 @@ type NewProps = { const New = (props: NewProps) => { const { schemaName, resource, uiSchema } = props; + const { currentFirm } = useContext(FirmContext); + const resourceBasePath = `firm/${currentFirm.instance}/${currentFirm.firm}` return ( )