@rippling/rippling-sdk 0.2.0-alpha.43 → 0.2.0-alpha.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/examples/manifest/dental-practice-management/dental-practice-management.ts +109 -59
- package/examples/manifest/dental-practice-management/manifest.json +83 -32
- package/examples/manifest/existing-manifest-mutations/existing-manifest-mutations.ts +6 -7
- package/examples/manifest/gym-membership-management/gym-membership-management.ts +107 -109
- package/examples/manifest/gym-membership-management/manifest.json +64 -39
- package/lib/manifest/_helpers.d.mts +4 -5
- package/lib/manifest/_helpers.d.mts.map +1 -1
- package/lib/manifest/_helpers.d.ts +4 -5
- package/lib/manifest/_helpers.d.ts.map +1 -1
- package/lib/manifest/_helpers.js.map +1 -1
- package/lib/manifest/_helpers.mjs.map +1 -1
- package/lib/manifest/app.d.mts +8 -13
- package/lib/manifest/app.d.mts.map +1 -1
- package/lib/manifest/app.d.ts +8 -13
- package/lib/manifest/app.d.ts.map +1 -1
- package/lib/manifest/app.js +13 -22
- package/lib/manifest/app.js.map +1 -1
- package/lib/manifest/app.mjs +13 -22
- package/lib/manifest/app.mjs.map +1 -1
- package/lib/manifest/custom-object-field-section.d.mts +2 -2
- package/lib/manifest/custom-object-field-section.d.ts +2 -2
- package/lib/manifest/custom-object-field-section.js +2 -2
- package/lib/manifest/custom-object-field-section.mjs +2 -2
- package/lib/manifest/custom-object-page-layout.d.mts +78 -37
- package/lib/manifest/custom-object-page-layout.d.mts.map +1 -1
- package/lib/manifest/custom-object-page-layout.d.ts +78 -37
- package/lib/manifest/custom-object-page-layout.d.ts.map +1 -1
- package/lib/manifest/custom-object-page-layout.js +263 -66
- package/lib/manifest/custom-object-page-layout.js.map +1 -1
- package/lib/manifest/custom-object-page-layout.mjs +263 -66
- package/lib/manifest/custom-object-page-layout.mjs.map +1 -1
- package/lib/manifest/custom-object.d.mts +6 -0
- package/lib/manifest/custom-object.d.mts.map +1 -1
- package/lib/manifest/custom-object.d.ts +6 -0
- package/lib/manifest/custom-object.d.ts.map +1 -1
- package/lib/manifest/custom-object.js +6 -0
- package/lib/manifest/custom-object.js.map +1 -1
- package/lib/manifest/custom-object.mjs +6 -0
- package/lib/manifest/custom-object.mjs.map +1 -1
- package/lib/manifest/existing-manifest-context.d.mts +0 -1
- package/lib/manifest/existing-manifest-context.d.mts.map +1 -1
- package/lib/manifest/existing-manifest-context.d.ts +0 -1
- package/lib/manifest/existing-manifest-context.d.ts.map +1 -1
- package/lib/manifest/existing-manifest-context.js +5 -10
- package/lib/manifest/existing-manifest-context.js.map +1 -1
- package/lib/manifest/existing-manifest-context.mjs +5 -10
- package/lib/manifest/existing-manifest-context.mjs.map +1 -1
- package/lib/manifest/field.d.mts +6 -3
- package/lib/manifest/field.d.mts.map +1 -1
- package/lib/manifest/field.d.ts +6 -3
- package/lib/manifest/field.d.ts.map +1 -1
- package/lib/manifest/field.js +26 -6
- package/lib/manifest/field.js.map +1 -1
- package/lib/manifest/field.mjs +26 -6
- package/lib/manifest/field.mjs.map +1 -1
- package/lib/manifest/sdui-page.d.mts +6 -1
- package/lib/manifest/sdui-page.d.mts.map +1 -1
- package/lib/manifest/sdui-page.d.ts +6 -1
- package/lib/manifest/sdui-page.d.ts.map +1 -1
- package/lib/manifest/sdui-page.js +6 -1
- package/lib/manifest/sdui-page.js.map +1 -1
- package/lib/manifest/sdui-page.mjs +6 -1
- package/lib/manifest/sdui-page.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/manifest/_helpers.ts +4 -5
- package/src/lib/manifest/app.ts +18 -27
- package/src/lib/manifest/custom-object-field-section.ts +2 -2
- package/src/lib/manifest/custom-object-page-layout.ts +477 -93
- package/src/lib/manifest/custom-object.ts +6 -0
- package/src/lib/manifest/existing-manifest-context.ts +5 -12
- package/src/lib/manifest/field.ts +45 -9
- package/src/lib/manifest/sdui-page.ts +6 -1
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -444,7 +444,6 @@ new CustomObjectPageLayout(patientObj, {
|
|
|
444
444
|
type: 'tab_with_sections',
|
|
445
445
|
sections: [
|
|
446
446
|
{
|
|
447
|
-
key: 'id',
|
|
448
447
|
name: 'Profile',
|
|
449
448
|
type: 'fields_section',
|
|
450
449
|
section: patientIdentitySection,
|
|
@@ -457,7 +456,6 @@ new CustomObjectPageLayout(patientObj, {
|
|
|
457
456
|
],
|
|
458
457
|
},
|
|
459
458
|
{
|
|
460
|
-
key: 'clinical',
|
|
461
459
|
name: 'Clinical & billing',
|
|
462
460
|
type: 'fields_section',
|
|
463
461
|
section: patientClinicalSection,
|
|
@@ -490,7 +488,6 @@ new CustomObjectPageLayout(operatoryObj, {
|
|
|
490
488
|
type: 'tab_with_sections',
|
|
491
489
|
sections: [
|
|
492
490
|
{
|
|
493
|
-
key: 'room',
|
|
494
491
|
name: 'Room',
|
|
495
492
|
type: 'fields_section',
|
|
496
493
|
section: operatorySection,
|
|
@@ -518,14 +515,12 @@ new CustomObjectPageLayout(apptObj, {
|
|
|
518
515
|
type: 'tab_with_sections',
|
|
519
516
|
sections: [
|
|
520
517
|
{
|
|
521
|
-
key: 'chair',
|
|
522
518
|
name: 'Chair & schedule',
|
|
523
519
|
type: 'fields_section',
|
|
524
520
|
section: apptOperatorySection,
|
|
525
521
|
fields: [apptOperatoryRef, apptStartField, apptDurationMins],
|
|
526
522
|
},
|
|
527
523
|
{
|
|
528
|
-
key: 'patient',
|
|
529
524
|
name: 'Patient & status',
|
|
530
525
|
type: 'fields_section',
|
|
531
526
|
section: apptPatientSection,
|
|
@@ -553,14 +548,12 @@ new CustomObjectPageLayout(planObj, {
|
|
|
553
548
|
type: 'tab_with_sections',
|
|
554
549
|
sections: [
|
|
555
550
|
{
|
|
556
|
-
key: 'link',
|
|
557
551
|
name: 'Patient',
|
|
558
552
|
type: 'fields_section',
|
|
559
553
|
section: planLinkSection,
|
|
560
554
|
fields: [planPatientRef],
|
|
561
555
|
},
|
|
562
556
|
{
|
|
563
|
-
key: 'content',
|
|
564
557
|
name: 'Planned work',
|
|
565
558
|
type: 'fields_section',
|
|
566
559
|
section: planBodySection,
|
|
@@ -575,64 +568,121 @@ new CustomObjectPageLayout(planObj, {
|
|
|
575
568
|
visibilityConditions: {},
|
|
576
569
|
});
|
|
577
570
|
|
|
578
|
-
// ── SDUI
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
'
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
571
|
+
// ── SDUI object-list tabs ───────────────────────────────────────────────────
|
|
572
|
+
const sduiObjectListDependencies = {
|
|
573
|
+
'@rippling/rippling-sdk': '^0.2.0-alpha.33',
|
|
574
|
+
'@rippling/sdui-builder': '^0.1.0',
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
function objectListViewCode(objectApiName: string): string {
|
|
578
|
+
return [
|
|
579
|
+
"import { FunctionContext, FunctionEvent, FunctionResponse } from '@rippling/rippling-sdk';",
|
|
580
|
+
"import SDUI from '@rippling/sdui-builder';",
|
|
581
|
+
'',
|
|
582
|
+
`const OBJECT = '${objectApiName}';`,
|
|
583
|
+
'',
|
|
584
|
+
'export async function onRipplingEvent(',
|
|
585
|
+
' event: FunctionEvent,',
|
|
586
|
+
' context: FunctionContext,',
|
|
587
|
+
'): Promise<FunctionResponse> {',
|
|
588
|
+
' const action = event.parameters?.action;',
|
|
589
|
+
'',
|
|
590
|
+
" if (!action || action === 'init') {",
|
|
591
|
+
' const s = SDUI.createState({});',
|
|
592
|
+
' const root = SDUI.components.VStack({',
|
|
593
|
+
' children: [',
|
|
594
|
+
' SDUI.components.ObjectListView({',
|
|
595
|
+
' objectApiName: OBJECT,',
|
|
596
|
+
' canSearchInGrid: true,',
|
|
597
|
+
' }),',
|
|
598
|
+
' ],',
|
|
599
|
+
' });',
|
|
600
|
+
' return new FunctionResponse({',
|
|
601
|
+
' body: { spec: JSON.stringify(SDUI.render(s, root)) },',
|
|
602
|
+
' statusCode: 200,',
|
|
603
|
+
' headers: {},',
|
|
604
|
+
" message: '',",
|
|
605
|
+
' });',
|
|
606
|
+
' }',
|
|
607
|
+
'',
|
|
608
|
+
" return new FunctionResponse({ body: {}, statusCode: 200, headers: {}, message: '' });",
|
|
609
|
+
'}',
|
|
610
|
+
].join('\n');
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function createObjectListPage(props: {
|
|
614
|
+
objectApiName: string;
|
|
615
|
+
functionApiName: string;
|
|
616
|
+
functionName: string;
|
|
617
|
+
functionDescription: string;
|
|
618
|
+
pageId: string;
|
|
619
|
+
pageName: string;
|
|
620
|
+
pageDescription: string;
|
|
621
|
+
}): SduiPage {
|
|
622
|
+
const listFn = new ManifestFunction(manifest, {
|
|
623
|
+
apiName: props.functionApiName,
|
|
624
|
+
name: props.functionName,
|
|
625
|
+
description: props.functionDescription,
|
|
626
|
+
runtime: 'lambda-deno',
|
|
627
|
+
code: objectListViewCode(props.objectApiName),
|
|
628
|
+
dependencies: sduiObjectListDependencies,
|
|
629
|
+
isAsync: false,
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
return new SduiPage(manifest, {
|
|
633
|
+
sduiPageId: props.pageId,
|
|
634
|
+
name: props.pageName,
|
|
635
|
+
function: listFn,
|
|
636
|
+
description: props.pageDescription,
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
const patientListPage = createObjectListPage({
|
|
641
|
+
objectApiName: patientObj.getApiName(),
|
|
642
|
+
functionApiName: 'dental_patient_list_fn',
|
|
643
|
+
functionName: 'Patients (SDUI)',
|
|
644
|
+
functionDescription: 'SDUI ObjectListView for patient records',
|
|
645
|
+
pageId: 'dental_patients',
|
|
646
|
+
pageName: 'Patients',
|
|
647
|
+
pageDescription: 'SDUI ObjectListView for patient records',
|
|
648
|
+
});
|
|
649
|
+
|
|
650
|
+
const operatoryListPage = createObjectListPage({
|
|
651
|
+
objectApiName: operatoryObj.getApiName(),
|
|
652
|
+
functionApiName: 'dental_operatory_list_fn',
|
|
653
|
+
functionName: 'Operatories (SDUI)',
|
|
654
|
+
functionDescription: 'SDUI ObjectListView for operatory records',
|
|
655
|
+
pageId: 'dental_operatories',
|
|
656
|
+
pageName: 'Operatories',
|
|
657
|
+
pageDescription: 'SDUI ObjectListView for operatory records',
|
|
658
|
+
});
|
|
659
|
+
|
|
660
|
+
const chairBoardPage = createObjectListPage({
|
|
661
|
+
objectApiName: apptObj.getApiName(),
|
|
662
|
+
functionApiName: 'dental_chair_schedule_fn',
|
|
663
|
+
functionName: 'Daily chair board (SDUI)',
|
|
664
|
+
functionDescription: 'SDUI ObjectListView for appointments (init + spec render)',
|
|
665
|
+
pageId: 'dental_chair_schedule',
|
|
666
|
+
pageName: 'Chair schedule',
|
|
667
|
+
pageDescription: 'SDUI list of appointments (searchable grid); use object records for status edits',
|
|
668
|
+
});
|
|
669
|
+
|
|
670
|
+
const treatmentPlanListPage = createObjectListPage({
|
|
671
|
+
objectApiName: planObj.getApiName(),
|
|
672
|
+
functionApiName: 'dental_treatment_plan_list_fn',
|
|
673
|
+
functionName: 'Treatment plans (SDUI)',
|
|
674
|
+
functionDescription: 'SDUI ObjectListView for treatment plan records',
|
|
675
|
+
pageId: 'dental_treatment_plans',
|
|
676
|
+
pageName: 'Treatment plans',
|
|
677
|
+
pageDescription: 'SDUI ObjectListView for treatment plan records',
|
|
628
678
|
});
|
|
629
679
|
|
|
630
680
|
new App(manifest, {
|
|
631
681
|
apiName: 'dental_practice_management_app',
|
|
632
682
|
name: 'Dental Practice Management',
|
|
633
|
-
description: 'Patient charts, operatories, treatment plans, and
|
|
683
|
+
description: 'Patient charts, operatories, treatment plans, and SDUI object-list tabs',
|
|
634
684
|
appType: 'custom',
|
|
635
|
-
pages: [
|
|
685
|
+
pages: [patientListPage, operatoryListPage, chairBoardPage, treatmentPlanListPage],
|
|
636
686
|
});
|
|
637
687
|
|
|
638
688
|
console.log(manifest.preview());
|
|
@@ -1588,6 +1588,7 @@
|
|
|
1588
1588
|
"name": "Patient chart",
|
|
1589
1589
|
"system_created": false,
|
|
1590
1590
|
"tab_edits": {
|
|
1591
|
+
"tabsOrder": ["chart"],
|
|
1591
1592
|
"newTabs": [
|
|
1592
1593
|
{
|
|
1593
1594
|
"key": "chart",
|
|
@@ -1595,7 +1596,6 @@
|
|
|
1595
1596
|
"type": "tab_with_sections",
|
|
1596
1597
|
"sections": [
|
|
1597
1598
|
{
|
|
1598
|
-
"key": "id",
|
|
1599
1599
|
"name": "Profile",
|
|
1600
1600
|
"type": "fields_section",
|
|
1601
1601
|
"fields": [
|
|
@@ -1617,7 +1617,6 @@
|
|
|
1617
1617
|
]
|
|
1618
1618
|
},
|
|
1619
1619
|
{
|
|
1620
|
-
"key": "clinical",
|
|
1621
1620
|
"name": "Clinical & billing",
|
|
1622
1621
|
"type": "fields_section",
|
|
1623
1622
|
"fields": [
|
|
@@ -1638,8 +1637,7 @@
|
|
|
1638
1637
|
]
|
|
1639
1638
|
}
|
|
1640
1639
|
],
|
|
1641
|
-
"systemTabEdits": {}
|
|
1642
|
-
"tabsOrder": ["chart"]
|
|
1640
|
+
"systemTabEdits": {}
|
|
1643
1641
|
},
|
|
1644
1642
|
"header_edits": {
|
|
1645
1643
|
"newTitleField": "legal_name__c"
|
|
@@ -1655,6 +1653,7 @@
|
|
|
1655
1653
|
"name": "Operatory",
|
|
1656
1654
|
"system_created": false,
|
|
1657
1655
|
"tab_edits": {
|
|
1656
|
+
"tabsOrder": ["overview"],
|
|
1658
1657
|
"newTabs": [
|
|
1659
1658
|
{
|
|
1660
1659
|
"key": "overview",
|
|
@@ -1662,7 +1661,6 @@
|
|
|
1662
1661
|
"type": "tab_with_sections",
|
|
1663
1662
|
"sections": [
|
|
1664
1663
|
{
|
|
1665
|
-
"key": "room",
|
|
1666
1664
|
"name": "Room",
|
|
1667
1665
|
"type": "fields_section",
|
|
1668
1666
|
"fields": [
|
|
@@ -1680,8 +1678,7 @@
|
|
|
1680
1678
|
]
|
|
1681
1679
|
}
|
|
1682
1680
|
],
|
|
1683
|
-
"systemTabEdits": {}
|
|
1684
|
-
"tabsOrder": ["overview"]
|
|
1681
|
+
"systemTabEdits": {}
|
|
1685
1682
|
},
|
|
1686
1683
|
"header_edits": {
|
|
1687
1684
|
"newTitleField": "operatory_name__c"
|
|
@@ -1697,6 +1694,7 @@
|
|
|
1697
1694
|
"name": "Appointment",
|
|
1698
1695
|
"system_created": false,
|
|
1699
1696
|
"tab_edits": {
|
|
1697
|
+
"tabsOrder": ["visit"],
|
|
1700
1698
|
"newTabs": [
|
|
1701
1699
|
{
|
|
1702
1700
|
"key": "visit",
|
|
@@ -1704,7 +1702,6 @@
|
|
|
1704
1702
|
"type": "tab_with_sections",
|
|
1705
1703
|
"sections": [
|
|
1706
1704
|
{
|
|
1707
|
-
"key": "chair",
|
|
1708
1705
|
"name": "Chair & schedule",
|
|
1709
1706
|
"type": "fields_section",
|
|
1710
1707
|
"fields": [
|
|
@@ -1720,7 +1717,6 @@
|
|
|
1720
1717
|
]
|
|
1721
1718
|
},
|
|
1722
1719
|
{
|
|
1723
|
-
"key": "patient",
|
|
1724
1720
|
"name": "Patient & status",
|
|
1725
1721
|
"type": "fields_section",
|
|
1726
1722
|
"fields": [
|
|
@@ -1744,8 +1740,7 @@
|
|
|
1744
1740
|
]
|
|
1745
1741
|
}
|
|
1746
1742
|
],
|
|
1747
|
-
"systemTabEdits": {}
|
|
1748
|
-
"tabsOrder": ["visit"]
|
|
1743
|
+
"systemTabEdits": {}
|
|
1749
1744
|
},
|
|
1750
1745
|
"header_edits": {
|
|
1751
1746
|
"newTitleField": "board_label__c"
|
|
@@ -1761,6 +1756,7 @@
|
|
|
1761
1756
|
"name": "Treatment plan",
|
|
1762
1757
|
"system_created": false,
|
|
1763
1758
|
"tab_edits": {
|
|
1759
|
+
"tabsOrder": ["plan"],
|
|
1764
1760
|
"newTabs": [
|
|
1765
1761
|
{
|
|
1766
1762
|
"key": "plan",
|
|
@@ -1768,7 +1764,6 @@
|
|
|
1768
1764
|
"type": "tab_with_sections",
|
|
1769
1765
|
"sections": [
|
|
1770
1766
|
{
|
|
1771
|
-
"key": "link",
|
|
1772
1767
|
"name": "Patient",
|
|
1773
1768
|
"type": "fields_section",
|
|
1774
1769
|
"fields": [
|
|
@@ -1778,7 +1773,6 @@
|
|
|
1778
1773
|
]
|
|
1779
1774
|
},
|
|
1780
1775
|
{
|
|
1781
|
-
"key": "content",
|
|
1782
1776
|
"name": "Planned work",
|
|
1783
1777
|
"type": "fields_section",
|
|
1784
1778
|
"fields": [
|
|
@@ -1802,8 +1796,7 @@
|
|
|
1802
1796
|
]
|
|
1803
1797
|
}
|
|
1804
1798
|
],
|
|
1805
|
-
"systemTabEdits": {}
|
|
1806
|
-
"tabsOrder": ["plan"]
|
|
1799
|
+
"systemTabEdits": {}
|
|
1807
1800
|
},
|
|
1808
1801
|
"header_edits": {
|
|
1809
1802
|
"newTitleField": "plan_name__c"
|
|
@@ -1811,6 +1804,48 @@
|
|
|
1811
1804
|
"visibility_conditions": {},
|
|
1812
1805
|
"blueprint_key": "dental_treatment_plan__c"
|
|
1813
1806
|
},
|
|
1807
|
+
{
|
|
1808
|
+
"type": "FUNCTION",
|
|
1809
|
+
"name": "Patients (SDUI)",
|
|
1810
|
+
"api_name": "dental_patient_list_fn",
|
|
1811
|
+
"description": "SDUI ObjectListView for patient records",
|
|
1812
|
+
"code_draft": "import { FunctionContext, FunctionEvent, FunctionResponse } from '@rippling/rippling-sdk';\nimport SDUI from '@rippling/sdui-builder';\n\nconst OBJECT = 'dental_patient__c';\n\nexport async function onRipplingEvent(\n event: FunctionEvent,\n context: FunctionContext,\n): Promise<FunctionResponse> {\n const action = event.parameters?.action;\n\n if (!action || action === 'init') {\n const s = SDUI.createState({});\n const root = SDUI.components.VStack({\n children: [\n SDUI.components.ObjectListView({\n objectApiName: OBJECT,\n canSearchInGrid: true,\n }),\n ],\n });\n return new FunctionResponse({\n body: { spec: JSON.stringify(SDUI.render(s, root)) },\n statusCode: 200,\n headers: {},\n message: '',\n });\n }\n\n return new FunctionResponse({ body: {}, statusCode: 200, headers: {}, message: '' });\n}",
|
|
1813
|
+
"dependencies": {
|
|
1814
|
+
"@rippling/rippling-sdk": "^0.2.0-alpha.33",
|
|
1815
|
+
"@rippling/sdui-builder": "^0.1.0"
|
|
1816
|
+
},
|
|
1817
|
+
"deployment_options": {
|
|
1818
|
+
"runtime": "lambda-deno"
|
|
1819
|
+
}
|
|
1820
|
+
},
|
|
1821
|
+
{
|
|
1822
|
+
"type": "SDUI_PAGE",
|
|
1823
|
+
"name": "Patients",
|
|
1824
|
+
"sdui_page_id": "dental_patients",
|
|
1825
|
+
"function_api_name": "dental_patient_list_fn",
|
|
1826
|
+
"description": "SDUI ObjectListView for patient records"
|
|
1827
|
+
},
|
|
1828
|
+
{
|
|
1829
|
+
"type": "FUNCTION",
|
|
1830
|
+
"name": "Operatories (SDUI)",
|
|
1831
|
+
"api_name": "dental_operatory_list_fn",
|
|
1832
|
+
"description": "SDUI ObjectListView for operatory records",
|
|
1833
|
+
"code_draft": "import { FunctionContext, FunctionEvent, FunctionResponse } from '@rippling/rippling-sdk';\nimport SDUI from '@rippling/sdui-builder';\n\nconst OBJECT = 'dental_operatory__c';\n\nexport async function onRipplingEvent(\n event: FunctionEvent,\n context: FunctionContext,\n): Promise<FunctionResponse> {\n const action = event.parameters?.action;\n\n if (!action || action === 'init') {\n const s = SDUI.createState({});\n const root = SDUI.components.VStack({\n children: [\n SDUI.components.ObjectListView({\n objectApiName: OBJECT,\n canSearchInGrid: true,\n }),\n ],\n });\n return new FunctionResponse({\n body: { spec: JSON.stringify(SDUI.render(s, root)) },\n statusCode: 200,\n headers: {},\n message: '',\n });\n }\n\n return new FunctionResponse({ body: {}, statusCode: 200, headers: {}, message: '' });\n}",
|
|
1834
|
+
"dependencies": {
|
|
1835
|
+
"@rippling/rippling-sdk": "^0.2.0-alpha.33",
|
|
1836
|
+
"@rippling/sdui-builder": "^0.1.0"
|
|
1837
|
+
},
|
|
1838
|
+
"deployment_options": {
|
|
1839
|
+
"runtime": "lambda-deno"
|
|
1840
|
+
}
|
|
1841
|
+
},
|
|
1842
|
+
{
|
|
1843
|
+
"type": "SDUI_PAGE",
|
|
1844
|
+
"name": "Operatories",
|
|
1845
|
+
"sdui_page_id": "dental_operatories",
|
|
1846
|
+
"function_api_name": "dental_operatory_list_fn",
|
|
1847
|
+
"description": "SDUI ObjectListView for operatory records"
|
|
1848
|
+
},
|
|
1814
1849
|
{
|
|
1815
1850
|
"type": "FUNCTION",
|
|
1816
1851
|
"name": "Daily chair board (SDUI)",
|
|
@@ -1832,37 +1867,53 @@
|
|
|
1832
1867
|
"function_api_name": "dental_chair_schedule_fn",
|
|
1833
1868
|
"description": "SDUI list of appointments (searchable grid); use object records for status edits"
|
|
1834
1869
|
},
|
|
1870
|
+
{
|
|
1871
|
+
"type": "FUNCTION",
|
|
1872
|
+
"name": "Treatment plans (SDUI)",
|
|
1873
|
+
"api_name": "dental_treatment_plan_list_fn",
|
|
1874
|
+
"description": "SDUI ObjectListView for treatment plan records",
|
|
1875
|
+
"code_draft": "import { FunctionContext, FunctionEvent, FunctionResponse } from '@rippling/rippling-sdk';\nimport SDUI from '@rippling/sdui-builder';\n\nconst OBJECT = 'dental_treatment_plan__c';\n\nexport async function onRipplingEvent(\n event: FunctionEvent,\n context: FunctionContext,\n): Promise<FunctionResponse> {\n const action = event.parameters?.action;\n\n if (!action || action === 'init') {\n const s = SDUI.createState({});\n const root = SDUI.components.VStack({\n children: [\n SDUI.components.ObjectListView({\n objectApiName: OBJECT,\n canSearchInGrid: true,\n }),\n ],\n });\n return new FunctionResponse({\n body: { spec: JSON.stringify(SDUI.render(s, root)) },\n statusCode: 200,\n headers: {},\n message: '',\n });\n }\n\n return new FunctionResponse({ body: {}, statusCode: 200, headers: {}, message: '' });\n}",
|
|
1876
|
+
"dependencies": {
|
|
1877
|
+
"@rippling/rippling-sdk": "^0.2.0-alpha.33",
|
|
1878
|
+
"@rippling/sdui-builder": "^0.1.0"
|
|
1879
|
+
},
|
|
1880
|
+
"deployment_options": {
|
|
1881
|
+
"runtime": "lambda-deno"
|
|
1882
|
+
}
|
|
1883
|
+
},
|
|
1884
|
+
{
|
|
1885
|
+
"type": "SDUI_PAGE",
|
|
1886
|
+
"name": "Treatment plans",
|
|
1887
|
+
"sdui_page_id": "dental_treatment_plans",
|
|
1888
|
+
"function_api_name": "dental_treatment_plan_list_fn",
|
|
1889
|
+
"description": "SDUI ObjectListView for treatment plan records"
|
|
1890
|
+
},
|
|
1835
1891
|
{
|
|
1836
1892
|
"type": "CUSTOM_APP",
|
|
1837
1893
|
"api_name": "dental_practice_management_app",
|
|
1838
1894
|
"name": "Dental Practice Management",
|
|
1839
|
-
"description": "Patient charts, operatories, treatment plans, and
|
|
1895
|
+
"description": "Patient charts, operatories, treatment plans, and SDUI object-list tabs",
|
|
1840
1896
|
"app_type": "custom",
|
|
1841
1897
|
"pages": [
|
|
1842
1898
|
{
|
|
1843
|
-
"api_name": "
|
|
1844
|
-
"page_type": "
|
|
1845
|
-
"
|
|
1846
|
-
},
|
|
1847
|
-
{
|
|
1848
|
-
"api_name": "dental_operatory__c",
|
|
1849
|
-
"page_type": "object_page",
|
|
1850
|
-
"object_rql_name": "dental_operatory__c"
|
|
1851
|
-
},
|
|
1852
|
-
{
|
|
1853
|
-
"api_name": "dental_appointment__c",
|
|
1854
|
-
"page_type": "object_page",
|
|
1855
|
-
"object_rql_name": "dental_appointment__c"
|
|
1899
|
+
"api_name": "dental_patients",
|
|
1900
|
+
"page_type": "sdui_page",
|
|
1901
|
+
"sdui_page_id": "dental_patients"
|
|
1856
1902
|
},
|
|
1857
1903
|
{
|
|
1858
|
-
"api_name": "
|
|
1859
|
-
"page_type": "
|
|
1860
|
-
"
|
|
1904
|
+
"api_name": "dental_operatories",
|
|
1905
|
+
"page_type": "sdui_page",
|
|
1906
|
+
"sdui_page_id": "dental_operatories"
|
|
1861
1907
|
},
|
|
1862
1908
|
{
|
|
1863
1909
|
"api_name": "dental_chair_schedule",
|
|
1864
1910
|
"page_type": "sdui_page",
|
|
1865
1911
|
"sdui_page_id": "dental_chair_schedule"
|
|
1912
|
+
},
|
|
1913
|
+
{
|
|
1914
|
+
"api_name": "dental_treatment_plans",
|
|
1915
|
+
"page_type": "sdui_page",
|
|
1916
|
+
"sdui_page_id": "dental_treatment_plans"
|
|
1866
1917
|
}
|
|
1867
1918
|
]
|
|
1868
1919
|
}
|
|
@@ -128,7 +128,6 @@ const existingManifestJson: ExistingManifest = {
|
|
|
128
128
|
type: 'tab_with_sections',
|
|
129
129
|
sections: [
|
|
130
130
|
{
|
|
131
|
-
key: 'profile',
|
|
132
131
|
name: 'Profile',
|
|
133
132
|
type: 'fields_section',
|
|
134
133
|
fields: [
|
|
@@ -138,7 +137,6 @@ const existingManifestJson: ExistingManifest = {
|
|
|
138
137
|
],
|
|
139
138
|
},
|
|
140
139
|
{
|
|
141
|
-
key: 'membership',
|
|
142
140
|
name: 'Membership',
|
|
143
141
|
type: 'fields_section',
|
|
144
142
|
fields: [{ fieldRqlName: 'membership_status__c' }, { fieldRqlName: 'join_date__c' }],
|
|
@@ -164,6 +162,9 @@ const memberObj = CustomObject.loadFromExisting('gym_member__c');
|
|
|
164
162
|
const profileSection = CustomObjectFieldSection.loadFromExisting('sec_gm_profile', {
|
|
165
163
|
customObjectApiName: memberObj.getApiName(),
|
|
166
164
|
});
|
|
165
|
+
const membershipSection = CustomObjectFieldSection.loadFromExisting('sec_gm_membership', {
|
|
166
|
+
customObjectApiName: memberObj.getApiName(),
|
|
167
|
+
});
|
|
167
168
|
const memberLayout = CustomObjectPageLayout.loadFromExisting('layout_gym_member', {
|
|
168
169
|
customObjectApiName: memberObj.getApiName(),
|
|
169
170
|
});
|
|
@@ -181,13 +182,12 @@ const preferredName = new TextField(memberObj, {
|
|
|
181
182
|
memberLayout
|
|
182
183
|
.removeField('phone__c', {
|
|
183
184
|
tabKey: 'member',
|
|
184
|
-
|
|
185
|
+
section: profileSection,
|
|
185
186
|
removeAll: false,
|
|
186
187
|
})
|
|
187
188
|
.addField(preferredName, {
|
|
188
189
|
tabKey: 'member',
|
|
189
|
-
|
|
190
|
-
fieldSection: profileSection,
|
|
190
|
+
section: profileSection,
|
|
191
191
|
position: 2,
|
|
192
192
|
});
|
|
193
193
|
|
|
@@ -211,13 +211,12 @@ const referralSource = new TextField(memberObj, {
|
|
|
211
211
|
// Remove one existing section from the layout, then add a different one.
|
|
212
212
|
// The removed section component and its fields remain in the manifest.
|
|
213
213
|
memberLayout
|
|
214
|
-
.removeSection(
|
|
214
|
+
.removeSection(membershipSection, {
|
|
215
215
|
tabKey: 'member',
|
|
216
216
|
removeAll: false,
|
|
217
217
|
})
|
|
218
218
|
.addSection(
|
|
219
219
|
{
|
|
220
|
-
key: 'marketing',
|
|
221
220
|
name: 'Marketing',
|
|
222
221
|
type: 'fields_section',
|
|
223
222
|
section: marketingSection,
|