Files
clinicpro/assets/admin/components/resources/ResourceServicesModal.tsx
T
hamedandClaude Opus 5 e08876f7b4 feat(resources): one tabbed page per resource
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>
2026-08-02 13:06:06 +03:30

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>
);
}