feat(estimates): template access control — owner can grant edit rights by role or individual

- Add TemplateAccessModal: role-level toggles (All Admins / All Field Agents) + per-person overrides
- Three-state access logic: role grant, individual direct grant, individual exclusion override
- Excluded people (role ON but toggled off) pinned to top with amber 'Excluded' chip
- Direct grants (role OFF but toggled on) show green 'Direct' chip
- canEditTemplates replaces isOwner for all template CRUD guards in EstimatesPage
- Owner retains exclusive access to Manage Access button
- State persisted in mockStore: templateAccessRoles, templateAccessUsers, templateAccessExcluded
This commit is contained in:
Satyam-Rastogi
2026-04-06 18:33:48 +05:30
parent fe9ddda941
commit c927f4c44d
3 changed files with 335 additions and 6 deletions
+9
View File
@@ -3639,6 +3639,9 @@ export const MockStoreProvider = ({ children }) => {
const [dispatchLeads, setDispatchLeads] = useState(DISPATCH_LEADS_INITIAL);
const [templates, setTemplates] = useState(MASTER_TEMPLATES_INITIAL);
const [estimates, setEstimates] = useState(MOCK_ESTIMATES_INITIAL);
const [templateAccessRoles, setTemplateAccessRoles] = useState([]);
const [templateAccessUsers, setTemplateAccessUsers] = useState([]);
const [templateAccessExcluded, setTemplateAccessExcluded] = useState([]);
// Initialize properties once
useEffect(() => {
@@ -3752,6 +3755,12 @@ export const MockStoreProvider = ({ children }) => {
deleteTemplate: (id) => {
setTemplates(prev => prev.filter(t => t.id !== id));
},
templateAccessRoles,
templateAccessUsers,
templateAccessExcluded,
setTemplateAccessRoles,
setTemplateAccessUsers,
setTemplateAccessExcluded,
// Estimates
estimates,