In the resource-first model a resource is the unit of capacity, so its
working hours, holidays, services, skills and categories belong to it — not
scattered across a list page's modals plus a separate calendar page.
/admin/resources/{uuid} now carries six tabs and the active tab lives in the
query string, so back and refresh land on the same view. The old
/calendar URL redirects to ?tab=hours instead of 404ing.
The skills and services modal bodies became panels the tab renders directly;
the modals are now thin wrappers, so the list page keeps working unchanged
and there is still one implementation of each editor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
import React from 'react';
|
|
import Modal from '../ui/Modal';
|
|
import ResourceServicesPanel, { type ServiceOfferingLine } from './ResourceServicesPanel';
|
|
import type { ClinicResource, ResourceServiceOffering, ServiceItemOption } from '../../types';
|
|
|
|
interface Props {
|
|
resource: ClinicResource | null;
|
|
offerings: ResourceServiceOffering[];
|
|
services: ServiceItemOption[];
|
|
saving: boolean;
|
|
onClose: () => void;
|
|
onSave: (lines: ServiceOfferingLine[]) => void;
|
|
}
|
|
|
|
/** همان پنل سرویسها، در قاب مودالِ فهرست منابع. */
|
|
export default function ResourceServicesModal({
|
|
resource, offerings, services, saving, onClose, onSave,
|
|
}: Props) {
|
|
return (
|
|
<Modal open={resource !== null} onClose={onClose} title={`سرویسهای ${resource?.name ?? 'منبع'}`}>
|
|
<ResourceServicesPanel
|
|
resource={resource}
|
|
offerings={offerings}
|
|
services={services}
|
|
saving={saving}
|
|
onCancel={onClose}
|
|
onSave={onSave}
|
|
/>
|
|
</Modal>
|
|
);
|
|
}
|