@rippling/rippling-sdk 0.2.0-alpha.83 → 0.2.0-alpha.85
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/custom-object-creation-workflow/custom-object-creation-workflow.ts +44 -26
- package/examples/manifest/dental-practice-management/dental-practice-management.ts +470 -142
- package/examples/manifest/dental-practice-management/functions/chair-schedule.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/complete-visit.ts +55 -32
- package/examples/manifest/dental-practice-management/functions/operatory-list.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/patient-list.ts +23 -13
- package/examples/manifest/dental-practice-management/functions/treatment-plan-list.ts +23 -13
- package/examples/manifest/existing-manifest-mutations/existing-manifest-mutations.ts +23 -68
- package/examples/manifest/field-service-dispatch/field-service-dispatch.ts +375 -102
- package/examples/manifest/grant-program-management/grant-program-management.ts +419 -125
- package/examples/manifest/gym-membership-management/functions/check-in-desk.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/member-list.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/today-schedule.ts +23 -13
- package/examples/manifest/gym-membership-management/functions/trainer-list.ts +23 -13
- package/examples/manifest/gym-membership-management/gym-membership-management.ts +442 -92
- package/examples/manifest/procurement-approval-hub/procurement-approval-hub.ts +408 -122
- package/examples/manifest/simple-todo-app/functions/mark-done.ts +12 -16
- package/examples/manifest/simple-todo-app/functions/todo-list.ts +23 -13
- package/examples/manifest/simple-todo-app/simple-todo-app.ts +109 -40
- package/examples/manifest/todo-app-without-object-list-view/functions/todo-page.ts +193 -166
- package/examples/manifest/todo-app-without-object-list-view/todo-app-without-object-list-view.ts +47 -24
- package/package.json +13 -7
- package/resources/custom-objects/custom-objects.d.mts +0 -7
- package/resources/custom-objects/custom-objects.d.mts.map +1 -1
- package/resources/custom-objects/custom-objects.d.ts +0 -7
- package/resources/custom-objects/custom-objects.d.ts.map +1 -1
- package/resources/custom-objects/custom-objects.js.map +1 -1
- package/resources/custom-objects/custom-objects.mjs.map +1 -1
- package/resources/custom-objects/fields.d.mts +14 -128
- package/resources/custom-objects/fields.d.mts.map +1 -1
- package/resources/custom-objects/fields.d.ts +14 -128
- package/resources/custom-objects/fields.d.ts.map +1 -1
- package/src/resources/custom-objects/custom-objects.ts +0 -8
- package/src/resources/custom-objects/fields.ts +13 -191
- package/src/tsconfig.json +1 -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
- package/core/platform/custom-objects/category.d.mts +0 -125
- package/core/platform/custom-objects/category.d.mts.map +0 -1
- package/core/platform/custom-objects/category.d.ts +0 -125
- package/core/platform/custom-objects/category.d.ts.map +0 -1
- package/core/platform/custom-objects/category.js +0 -188
- package/core/platform/custom-objects/category.js.map +0 -1
- package/core/platform/custom-objects/category.mjs +0 -178
- package/core/platform/custom-objects/category.mjs.map +0 -1
- package/core/platform/custom-objects/definition.d.mts +0 -147
- package/core/platform/custom-objects/definition.d.mts.map +0 -1
- package/core/platform/custom-objects/definition.d.ts +0 -147
- package/core/platform/custom-objects/definition.d.ts.map +0 -1
- package/core/platform/custom-objects/definition.js +0 -200
- package/core/platform/custom-objects/definition.js.map +0 -1
- package/core/platform/custom-objects/definition.mjs +0 -190
- package/core/platform/custom-objects/definition.mjs.map +0 -1
- package/core/platform/custom-objects/fields.d.mts +0 -302
- package/core/platform/custom-objects/fields.d.mts.map +0 -1
- package/core/platform/custom-objects/fields.d.ts +0 -302
- package/core/platform/custom-objects/fields.d.ts.map +0 -1
- package/core/platform/custom-objects/fields.js +0 -369
- package/core/platform/custom-objects/fields.js.map +0 -1
- package/core/platform/custom-objects/fields.mjs +0 -347
- package/core/platform/custom-objects/fields.mjs.map +0 -1
- package/core/platform/custom-objects/function-runtime.d.mts +0 -42
- package/core/platform/custom-objects/function-runtime.d.mts.map +0 -1
- package/core/platform/custom-objects/function-runtime.d.ts +0 -42
- package/core/platform/custom-objects/function-runtime.d.ts.map +0 -1
- package/core/platform/custom-objects/function-runtime.js +0 -38
- package/core/platform/custom-objects/function-runtime.js.map +0 -1
- package/core/platform/custom-objects/function-runtime.mjs +0 -35
- package/core/platform/custom-objects/function-runtime.mjs.map +0 -1
- package/core/platform/custom-objects/lifecycle.d.mts +0 -83
- package/core/platform/custom-objects/lifecycle.d.mts.map +0 -1
- package/core/platform/custom-objects/lifecycle.d.ts +0 -83
- package/core/platform/custom-objects/lifecycle.d.ts.map +0 -1
- package/core/platform/custom-objects/lifecycle.js +0 -372
- package/core/platform/custom-objects/lifecycle.js.map +0 -1
- package/core/platform/custom-objects/lifecycle.mjs +0 -367
- package/core/platform/custom-objects/lifecycle.mjs.map +0 -1
- package/core/platform/custom-objects/manager.d.mts +0 -354
- package/core/platform/custom-objects/manager.d.mts.map +0 -1
- package/core/platform/custom-objects/manager.d.ts +0 -354
- package/core/platform/custom-objects/manager.d.ts.map +0 -1
- package/core/platform/custom-objects/manager.js +0 -646
- package/core/platform/custom-objects/manager.js.map +0 -1
- package/core/platform/custom-objects/manager.mjs +0 -637
- package/core/platform/custom-objects/manager.mjs.map +0 -1
- package/core/platform/custom-objects/provisioning.d.mts +0 -138
- package/core/platform/custom-objects/provisioning.d.mts.map +0 -1
- package/core/platform/custom-objects/provisioning.d.ts +0 -138
- package/core/platform/custom-objects/provisioning.d.ts.map +0 -1
- package/core/platform/custom-objects/provisioning.js +0 -455
- package/core/platform/custom-objects/provisioning.js.map +0 -1
- package/core/platform/custom-objects/provisioning.mjs +0 -447
- package/core/platform/custom-objects/provisioning.mjs.map +0 -1
- package/core/platform/custom-objects/rql.d.mts +0 -122
- package/core/platform/custom-objects/rql.d.mts.map +0 -1
- package/core/platform/custom-objects/rql.d.ts +0 -122
- package/core/platform/custom-objects/rql.d.ts.map +0 -1
- package/core/platform/custom-objects/rql.js +0 -225
- package/core/platform/custom-objects/rql.js.map +0 -1
- package/core/platform/custom-objects/rql.mjs +0 -222
- package/core/platform/custom-objects/rql.mjs.map +0 -1
- package/core/platform/custom-objects/schema-manager.d.mts +0 -203
- package/core/platform/custom-objects/schema-manager.d.mts.map +0 -1
- package/core/platform/custom-objects/schema-manager.d.ts +0 -203
- package/core/platform/custom-objects/schema-manager.d.ts.map +0 -1
- package/core/platform/custom-objects/schema-manager.js +0 -256
- package/core/platform/custom-objects/schema-manager.js.map +0 -1
- package/core/platform/custom-objects/schema-manager.mjs +0 -249
- package/core/platform/custom-objects/schema-manager.mjs.map +0 -1
- package/core/platform/custom-objects/typed-rql.d.mts +0 -157
- package/core/platform/custom-objects/typed-rql.d.mts.map +0 -1
- package/core/platform/custom-objects/typed-rql.d.ts +0 -157
- package/core/platform/custom-objects/typed-rql.d.ts.map +0 -1
- package/core/platform/custom-objects/typed-rql.js +0 -583
- package/core/platform/custom-objects/typed-rql.js.map +0 -1
- package/core/platform/custom-objects/typed-rql.mjs +0 -580
- package/core/platform/custom-objects/typed-rql.mjs.map +0 -1
- package/core/platform/custom-objects/types.d.mts +0 -549
- package/core/platform/custom-objects/types.d.mts.map +0 -1
- package/core/platform/custom-objects/types.d.ts +0 -549
- package/core/platform/custom-objects/types.d.ts.map +0 -1
- package/core/platform/custom-objects/types.js +0 -20
- package/core/platform/custom-objects/types.js.map +0 -1
- package/core/platform/custom-objects/types.mjs +0 -17
- package/core/platform/custom-objects/types.mjs.map +0 -1
- package/core/platform/custom-objects/validation.d.mts +0 -97
- package/core/platform/custom-objects/validation.d.mts.map +0 -1
- package/core/platform/custom-objects/validation.d.ts +0 -97
- package/core/platform/custom-objects/validation.d.ts.map +0 -1
- package/core/platform/custom-objects/validation.js +0 -477
- package/core/platform/custom-objects/validation.js.map +0 -1
- package/core/platform/custom-objects/validation.mjs +0 -465
- package/core/platform/custom-objects/validation.mjs.map +0 -1
- package/core/platform/custom-objects.d.mts +0 -67
- package/core/platform/custom-objects.d.mts.map +0 -1
- package/core/platform/custom-objects.d.ts +0 -67
- package/core/platform/custom-objects.d.ts.map +0 -1
- package/core/platform/custom-objects.js +0 -118
- package/core/platform/custom-objects.js.map +0 -1
- package/core/platform/custom-objects.mjs +0 -45
- package/core/platform/custom-objects.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/action.d.mts +0 -58
- package/core/platform/manifest/custom-objects/action.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/action.d.ts +0 -58
- package/core/platform/manifest/custom-objects/action.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/action.js +0 -44
- package/core/platform/manifest/custom-objects/action.js.map +0 -1
- package/core/platform/manifest/custom-objects/action.mjs +0 -40
- package/core/platform/manifest/custom-objects/action.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.d.mts +0 -240
- package/core/platform/manifest/custom-objects/conditions.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.d.ts +0 -240
- package/core/platform/manifest/custom-objects/conditions.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.js +0 -326
- package/core/platform/manifest/custom-objects/conditions.js.map +0 -1
- package/core/platform/manifest/custom-objects/conditions.mjs +0 -321
- package/core/platform/manifest/custom-objects/conditions.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/existing.d.mts +0 -87
- package/core/platform/manifest/custom-objects/existing.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/existing.d.ts +0 -87
- package/core/platform/manifest/custom-objects/existing.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/existing.js +0 -113
- package/core/platform/manifest/custom-objects/existing.js.map +0 -1
- package/core/platform/manifest/custom-objects/existing.mjs +0 -109
- package/core/platform/manifest/custom-objects/existing.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.d.mts +0 -48
- package/core/platform/manifest/custom-objects/field-resolution.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.d.ts +0 -48
- package/core/platform/manifest/custom-objects/field-resolution.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.js +0 -61
- package/core/platform/manifest/custom-objects/field-resolution.js.map +0 -1
- package/core/platform/manifest/custom-objects/field-resolution.mjs +0 -58
- package/core/platform/manifest/custom-objects/field-resolution.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.d.mts +0 -87
- package/core/platform/manifest/custom-objects/function-file.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.d.ts +0 -87
- package/core/platform/manifest/custom-objects/function-file.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.js +0 -76
- package/core/platform/manifest/custom-objects/function-file.js.map +0 -1
- package/core/platform/manifest/custom-objects/function-file.mjs +0 -69
- package/core/platform/manifest/custom-objects/function-file.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.d.mts +0 -65
- package/core/platform/manifest/custom-objects/list-view.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.d.ts +0 -65
- package/core/platform/manifest/custom-objects/list-view.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.js +0 -33
- package/core/platform/manifest/custom-objects/list-view.js.map +0 -1
- package/core/platform/manifest/custom-objects/list-view.mjs +0 -30
- package/core/platform/manifest/custom-objects/list-view.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.d.mts +0 -43
- package/core/platform/manifest/custom-objects/object-list-page.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.d.ts +0 -43
- package/core/platform/manifest/custom-objects/object-list-page.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.js +0 -54
- package/core/platform/manifest/custom-objects/object-list-page.js.map +0 -1
- package/core/platform/manifest/custom-objects/object-list-page.mjs +0 -50
- package/core/platform/manifest/custom-objects/object-list-page.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.d.mts +0 -142
- package/core/platform/manifest/custom-objects/page-layout.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.d.ts +0 -142
- package/core/platform/manifest/custom-objects/page-layout.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.js +0 -184
- package/core/platform/manifest/custom-objects/page-layout.js.map +0 -1
- package/core/platform/manifest/custom-objects/page-layout.mjs +0 -180
- package/core/platform/manifest/custom-objects/page-layout.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/register.d.mts +0 -87
- package/core/platform/manifest/custom-objects/register.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/register.d.ts +0 -87
- package/core/platform/manifest/custom-objects/register.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/register.js +0 -395
- package/core/platform/manifest/custom-objects/register.js.map +0 -1
- package/core/platform/manifest/custom-objects/register.mjs +0 -391
- package/core/platform/manifest/custom-objects/register.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/rule.d.mts +0 -113
- package/core/platform/manifest/custom-objects/rule.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/rule.d.ts +0 -113
- package/core/platform/manifest/custom-objects/rule.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/rule.js +0 -49
- package/core/platform/manifest/custom-objects/rule.js.map +0 -1
- package/core/platform/manifest/custom-objects/rule.mjs +0 -45
- package/core/platform/manifest/custom-objects/rule.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.d.mts +0 -214
- package/core/platform/manifest/custom-objects/sdui-page.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.d.ts +0 -214
- package/core/platform/manifest/custom-objects/sdui-page.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.js +0 -194
- package/core/platform/manifest/custom-objects/sdui-page.js.map +0 -1
- package/core/platform/manifest/custom-objects/sdui-page.mjs +0 -182
- package/core/platform/manifest/custom-objects/sdui-page.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.d.mts +0 -28
- package/core/platform/manifest/custom-objects/typed-condition.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.d.ts +0 -28
- package/core/platform/manifest/custom-objects/typed-condition.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.js +0 -434
- package/core/platform/manifest/custom-objects/typed-condition.js.map +0 -1
- package/core/platform/manifest/custom-objects/typed-condition.mjs +0 -431
- package/core/platform/manifest/custom-objects/typed-condition.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/types.d.mts +0 -29
- package/core/platform/manifest/custom-objects/types.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/types.d.ts +0 -29
- package/core/platform/manifest/custom-objects/types.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/types.js +0 -3
- package/core/platform/manifest/custom-objects/types.js.map +0 -1
- package/core/platform/manifest/custom-objects/types.mjs +0 -2
- package/core/platform/manifest/custom-objects/types.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/validation.d.mts +0 -44
- package/core/platform/manifest/custom-objects/validation.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/validation.d.ts +0 -44
- package/core/platform/manifest/custom-objects/validation.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/validation.js +0 -30
- package/core/platform/manifest/custom-objects/validation.js.map +0 -1
- package/core/platform/manifest/custom-objects/validation.mjs +0 -27
- package/core/platform/manifest/custom-objects/validation.mjs.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.d.mts +0 -47
- package/core/platform/manifest/custom-objects/workflow.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.d.ts +0 -47
- package/core/platform/manifest/custom-objects/workflow.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.js +0 -38
- package/core/platform/manifest/custom-objects/workflow.js.map +0 -1
- package/core/platform/manifest/custom-objects/workflow.mjs +0 -34
- package/core/platform/manifest/custom-objects/workflow.mjs.map +0 -1
- package/core/platform/manifest/custom-objects.d.mts +0 -85
- package/core/platform/manifest/custom-objects.d.mts.map +0 -1
- package/core/platform/manifest/custom-objects.d.ts +0 -85
- package/core/platform/manifest/custom-objects.d.ts.map +0 -1
- package/core/platform/manifest/custom-objects.js +0 -84
- package/core/platform/manifest/custom-objects.js.map +0 -1
- package/core/platform/manifest/custom-objects.mjs +0 -55
- package/core/platform/manifest/custom-objects.mjs.map +0 -1
- package/examples/manifest/custom-object-creation-workflow/functions/intake-request-created.ts +0 -20
- package/examples/manifest/custom-object-creation-workflow/schema.ts +0 -29
- package/examples/manifest/dental-practice-management/schema.ts +0 -298
- package/examples/manifest/field-service-dispatch/schema.ts +0 -248
- package/examples/manifest/grant-program-management/schema.ts +0 -269
- package/examples/manifest/gym-membership-management/schema.ts +0 -266
- package/examples/manifest/procurement-approval-hub/functions/route-purchase-request.ts +0 -20
- package/examples/manifest/procurement-approval-hub/schema.ts +0 -256
- package/examples/manifest/simple-todo-app/schema.ts +0 -60
- package/examples/manifest/todo-app-without-object-list-view/schema.ts +0 -28
- package/src/core/platform/README.md +0 -20
- package/src/core/platform/custom-objects/category.ts +0 -294
- package/src/core/platform/custom-objects/definition.ts +0 -373
- package/src/core/platform/custom-objects/fields.ts +0 -653
- package/src/core/platform/custom-objects/function-runtime.ts +0 -76
- package/src/core/platform/custom-objects/lifecycle.ts +0 -557
- package/src/core/platform/custom-objects/manager.ts +0 -959
- package/src/core/platform/custom-objects/provisioning.ts +0 -672
- package/src/core/platform/custom-objects/rql.ts +0 -375
- package/src/core/platform/custom-objects/schema-manager.ts +0 -351
- package/src/core/platform/custom-objects/typed-rql.ts +0 -1273
- package/src/core/platform/custom-objects/types.ts +0 -753
- package/src/core/platform/custom-objects/validation.ts +0 -573
- package/src/core/platform/custom-objects.ts +0 -269
- package/src/core/platform/manifest/README.md +0 -26
- package/src/core/platform/manifest/custom-objects/action.ts +0 -87
- package/src/core/platform/manifest/custom-objects/conditions.ts +0 -762
- package/src/core/platform/manifest/custom-objects/existing.ts +0 -221
- package/src/core/platform/manifest/custom-objects/field-resolution.ts +0 -116
- package/src/core/platform/manifest/custom-objects/function-file.ts +0 -149
- package/src/core/platform/manifest/custom-objects/list-view.ts +0 -95
- package/src/core/platform/manifest/custom-objects/object-list-page.ts +0 -87
- package/src/core/platform/manifest/custom-objects/page-layout.ts +0 -380
- package/src/core/platform/manifest/custom-objects/register.ts +0 -555
- package/src/core/platform/manifest/custom-objects/rule.ts +0 -192
- package/src/core/platform/manifest/custom-objects/sdui-page.ts +0 -515
- package/src/core/platform/manifest/custom-objects/typed-condition.ts +0 -617
- package/src/core/platform/manifest/custom-objects/types.ts +0 -92
- package/src/core/platform/manifest/custom-objects/validation.ts +0 -70
- package/src/core/platform/manifest/custom-objects/workflow.ts +0 -71
- package/src/core/platform/manifest/custom-objects.ts +0 -203
- package/src/pebble-sdui-web-custom-apps-shim.d.ts +0 -3
|
@@ -14,25 +14,34 @@
|
|
|
14
14
|
* (With npx, use `2>/dev/null` before `>` if npm prints warnings into the file.)
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import * as fs from 'node:fs';
|
|
17
18
|
import * as path from 'node:path';
|
|
18
|
-
import { toCustomCategoryApiName } from '@rippling/rippling-sdk/core/platform/custom-objects';
|
|
19
19
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
App,
|
|
21
|
+
Category,
|
|
22
|
+
CustomObject,
|
|
23
|
+
CustomObjectFieldSection,
|
|
24
|
+
CustomObjectPageLayout,
|
|
25
|
+
DatetimeField,
|
|
26
|
+
DateField,
|
|
27
|
+
EmailField,
|
|
28
|
+
FormulaField,
|
|
29
|
+
ListViewDef,
|
|
30
|
+
LongTextField,
|
|
31
|
+
LookupField,
|
|
32
|
+
ManifestBuilder,
|
|
33
|
+
ManifestFunction,
|
|
34
|
+
NumberField,
|
|
35
|
+
ParentChildField,
|
|
36
|
+
PhoneField,
|
|
37
|
+
RadioField,
|
|
38
|
+
Rule,
|
|
39
|
+
SelectField,
|
|
40
|
+
SduiPage,
|
|
41
|
+
SummaryField,
|
|
42
|
+
TextField,
|
|
43
|
+
Validation,
|
|
44
|
+
} from '@rippling/rippling-sdk/lib/manifest';
|
|
36
45
|
|
|
37
46
|
const manifest = new ManifestBuilder({
|
|
38
47
|
key: 'gym_membership_management',
|
|
@@ -42,138 +51,455 @@ const manifest = new ManifestBuilder({
|
|
|
42
51
|
});
|
|
43
52
|
|
|
44
53
|
const gymCategory = new Category(manifest, {
|
|
45
|
-
apiName:
|
|
54
|
+
apiName: 'gym__c',
|
|
46
55
|
name: 'Gym',
|
|
47
56
|
description: 'Memberships, staff, schedules, and attendance',
|
|
48
57
|
});
|
|
49
58
|
|
|
50
|
-
|
|
59
|
+
// ── Member ────────────────────────────────────────────────────────────────────
|
|
60
|
+
const memberObj = new CustomObject(manifest, {
|
|
61
|
+
apiName: 'gym_member__c',
|
|
62
|
+
name: 'Member',
|
|
63
|
+
pluralLabel: 'Members',
|
|
51
64
|
category: gymCategory,
|
|
52
|
-
|
|
65
|
+
description: 'Gym member profile, contact, and membership status',
|
|
66
|
+
icon: { emoji: '🏋️' },
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const memberProfileSection = new CustomObjectFieldSection(memberObj, {
|
|
70
|
+
name: 'Profile',
|
|
71
|
+
sectionId: 'sec_gm_profile',
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const memberMembershipSection = new CustomObjectFieldSection(memberObj, {
|
|
75
|
+
name: 'Membership',
|
|
76
|
+
sectionId: 'sec_gm_membership',
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const memberFirstName = new TextField(memberObj, {
|
|
80
|
+
apiName: 'first_name__c',
|
|
81
|
+
displayName: 'First name',
|
|
82
|
+
description: 'First name field',
|
|
83
|
+
required: true,
|
|
84
|
+
maxLength: 80,
|
|
85
|
+
section: memberProfileSection,
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const memberLastName = new TextField(memberObj, {
|
|
89
|
+
apiName: 'last_name__c',
|
|
90
|
+
displayName: 'Last name',
|
|
91
|
+
description: 'Last name field',
|
|
92
|
+
required: true,
|
|
93
|
+
maxLength: 80,
|
|
94
|
+
section: memberProfileSection,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const memberEmail = new EmailField(memberObj, {
|
|
98
|
+
apiName: 'email__c',
|
|
99
|
+
displayName: 'Email',
|
|
100
|
+
description: 'Email field',
|
|
101
|
+
unique: true,
|
|
102
|
+
section: memberProfileSection,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const memberPhone = new PhoneField(memberObj, {
|
|
106
|
+
apiName: 'phone__c',
|
|
107
|
+
displayName: 'Phone',
|
|
108
|
+
description: 'Phone field',
|
|
109
|
+
section: memberProfileSection,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const memberStatusField = new RadioField(memberObj, {
|
|
113
|
+
apiName: 'membership_status__c',
|
|
114
|
+
displayName: 'Membership status',
|
|
115
|
+
description: 'Membership status field',
|
|
116
|
+
options: ['Active', 'Frozen', 'Cancelled', 'Trial'],
|
|
117
|
+
required: true,
|
|
118
|
+
section: memberMembershipSection,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const memberJoinDate = new DateField(memberObj, {
|
|
122
|
+
apiName: 'join_date__c',
|
|
123
|
+
displayName: 'Join date',
|
|
124
|
+
description: 'Join date field',
|
|
125
|
+
section: memberMembershipSection,
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const memberEmergencyField = new LongTextField(memberObj, {
|
|
129
|
+
apiName: 'emergency_contact__c',
|
|
130
|
+
displayName: 'Emergency contact',
|
|
131
|
+
maxLength: 2000,
|
|
132
|
+
description: 'Name and phone for emergencies',
|
|
133
|
+
section: memberMembershipSection,
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const memberPreferredClassTypesField = new SelectField(memberObj, {
|
|
137
|
+
apiName: 'preferred_class_types__c',
|
|
138
|
+
displayName: 'Preferred class types',
|
|
139
|
+
description: 'One or more class types the member enjoys',
|
|
140
|
+
options: ['Yoga', 'Spin', 'HIIT', 'Strength', 'Pilates', 'Dance', 'Aquatics'],
|
|
141
|
+
section: memberMembershipSection,
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// ── Trainer ─────────────────────────────────────────────────────────────────
|
|
145
|
+
const trainerObj = new CustomObject(manifest, {
|
|
146
|
+
apiName: 'gym_trainer__c',
|
|
147
|
+
name: 'Trainer',
|
|
148
|
+
pluralLabel: 'Trainers',
|
|
149
|
+
category: gymCategory,
|
|
150
|
+
description: 'Instructors and coaches who lead scheduled classes',
|
|
151
|
+
icon: { emoji: '🎯' },
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const trainerSection = new CustomObjectFieldSection(trainerObj, {
|
|
155
|
+
name: 'Trainer',
|
|
156
|
+
sectionId: 'sec_tr_profile',
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
const trainerEmailField = new EmailField(trainerObj, {
|
|
160
|
+
apiName: 'email__c',
|
|
161
|
+
displayName: 'Email',
|
|
162
|
+
description: 'Email field',
|
|
163
|
+
section: trainerSection,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const trainerSpecialtyField = new RadioField(trainerObj, {
|
|
167
|
+
apiName: 'specialty__c',
|
|
168
|
+
displayName: 'Primary specialty',
|
|
169
|
+
description: 'Primary specialty field',
|
|
170
|
+
options: ['Yoga', 'Spin', 'HIIT', 'Strength', 'Pilates', 'Dance', 'Aquatics', 'General'],
|
|
171
|
+
section: trainerSection,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
const trainerBioField = new LongTextField(trainerObj, {
|
|
175
|
+
apiName: 'bio__c',
|
|
176
|
+
displayName: 'Bio & certifications',
|
|
177
|
+
description: 'Bio & certifications field',
|
|
178
|
+
maxLength: 4000,
|
|
179
|
+
section: trainerSection,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const trainerLabelField = new FormulaField(trainerObj, {
|
|
183
|
+
apiName: 'trainer_label__c',
|
|
184
|
+
displayName: 'List label',
|
|
185
|
+
description: 'List label field',
|
|
186
|
+
fieldType: 'TEXT',
|
|
187
|
+
maxLength: 220,
|
|
188
|
+
formula: "CONCATENATE(name, ' · ', specialty__c)",
|
|
189
|
+
section: trainerSection,
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// ── Class session ───────────────────────────────────────────────────────────
|
|
193
|
+
const sessionObj = new CustomObject(manifest, {
|
|
194
|
+
apiName: 'gym_class_session__c',
|
|
195
|
+
name: 'Class session',
|
|
196
|
+
pluralLabel: 'Class sessions',
|
|
197
|
+
category: gymCategory,
|
|
198
|
+
description: 'A scheduled class with assigned trainer, time, and capacity',
|
|
199
|
+
icon: { emoji: '📅' },
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const sessionScheduleSection = new CustomObjectFieldSection(sessionObj, {
|
|
203
|
+
name: 'Schedule',
|
|
204
|
+
sectionId: 'sec_cs_schedule',
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const sessionTrainerSection = new CustomObjectFieldSection(sessionObj, {
|
|
208
|
+
name: 'Class & room',
|
|
209
|
+
sectionId: 'sec_cs_class',
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const sessionTrainerRef = new LookupField(sessionObj, {
|
|
213
|
+
apiName: 'trainer_ref__c',
|
|
214
|
+
displayName: 'Trainer',
|
|
215
|
+
target: trainerObj,
|
|
216
|
+
relatedDataLabel: 'Class sessions',
|
|
217
|
+
required: true,
|
|
218
|
+
description: 'Instructor leading this session',
|
|
219
|
+
section: sessionScheduleSection,
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
const sessionStartField = new DatetimeField(sessionObj, {
|
|
223
|
+
apiName: 'start_time__c',
|
|
224
|
+
displayName: 'Start',
|
|
225
|
+
required: true,
|
|
226
|
+
description: 'Session start (local)',
|
|
227
|
+
section: sessionScheduleSection,
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
const sessionEndField = new DatetimeField(sessionObj, {
|
|
231
|
+
apiName: 'end_time__c',
|
|
232
|
+
displayName: 'End',
|
|
233
|
+
required: true,
|
|
234
|
+
description: 'Session end (local)',
|
|
235
|
+
section: sessionScheduleSection,
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
const sessionClassTypeField = new RadioField(sessionObj, {
|
|
239
|
+
apiName: 'class_type__c',
|
|
240
|
+
displayName: 'Class type',
|
|
241
|
+
description: 'Class type field',
|
|
242
|
+
options: [
|
|
243
|
+
'Yoga',
|
|
244
|
+
'Spin',
|
|
245
|
+
'HIIT',
|
|
246
|
+
'Strength',
|
|
247
|
+
'Pilates',
|
|
248
|
+
'Dance',
|
|
249
|
+
'Aquatics',
|
|
250
|
+
'Recovery / stretch',
|
|
251
|
+
'Other',
|
|
252
|
+
],
|
|
253
|
+
required: true,
|
|
254
|
+
section: sessionTrainerSection,
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const sessionRoomField = new TextField(sessionObj, {
|
|
258
|
+
apiName: 'room_name__c',
|
|
259
|
+
displayName: 'Studio / room',
|
|
260
|
+
maxLength: 80,
|
|
261
|
+
description: 'E.g. Studio A, Pool lane 2',
|
|
262
|
+
section: sessionTrainerSection,
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
const sessionCapacityField = new NumberField(sessionObj, {
|
|
266
|
+
apiName: 'capacity__c',
|
|
267
|
+
displayName: 'Capacity',
|
|
268
|
+
decimalPlaces: 0,
|
|
269
|
+
description: 'Maximum attendees for this session',
|
|
270
|
+
section: sessionTrainerSection,
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
const sessionNotesField = new LongTextField(sessionObj, {
|
|
274
|
+
apiName: 'session_notes__c',
|
|
275
|
+
displayName: 'Notes',
|
|
276
|
+
description: 'Notes field',
|
|
277
|
+
maxLength: 4000,
|
|
278
|
+
section: sessionTrainerSection,
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
const sessionDayField = new FormulaField(sessionObj, {
|
|
282
|
+
apiName: 'session_date__c',
|
|
283
|
+
displayName: 'Session date',
|
|
284
|
+
fieldType: 'DATE',
|
|
285
|
+
formula: "DATETRUNC('DAY', start_time__c)",
|
|
286
|
+
description: 'Calendar day for filtering “today” views',
|
|
287
|
+
section: sessionScheduleSection,
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
const sessionBoardLabel = new FormulaField(sessionObj, {
|
|
291
|
+
apiName: 'session_board_label__c',
|
|
292
|
+
displayName: 'Board label',
|
|
293
|
+
description: 'Board label field',
|
|
294
|
+
fieldType: 'TEXT',
|
|
295
|
+
maxLength: 260,
|
|
296
|
+
formula: "CONCATENATE(class_type__c, ' · ', room_name__c)",
|
|
297
|
+
section: sessionScheduleSection,
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
// ── Enrollment (child of session) ───────────────────────────────────────────
|
|
301
|
+
const enrollmentObj = new CustomObject(manifest, {
|
|
302
|
+
apiName: 'gym_class_enrollment__c',
|
|
303
|
+
name: 'Class enrollment',
|
|
304
|
+
pluralLabel: 'Class enrollments',
|
|
305
|
+
category: gymCategory,
|
|
306
|
+
description: 'Member registration for a session with attendance and check-in',
|
|
307
|
+
icon: { emoji: '✅' },
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
const enrollmentSessionSection = new CustomObjectFieldSection(enrollmentObj, {
|
|
311
|
+
name: 'Session & member',
|
|
312
|
+
sectionId: 'sec_ce_link',
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
const enrollmentAttendanceSection = new CustomObjectFieldSection(enrollmentObj, {
|
|
316
|
+
name: 'Attendance',
|
|
317
|
+
sectionId: 'sec_ce_att',
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
const enrollmentSessionRef = new ParentChildField(enrollmentObj, {
|
|
321
|
+
apiName: 'class_session_ref__c',
|
|
322
|
+
displayName: 'Class session',
|
|
323
|
+
target: sessionObj,
|
|
324
|
+
relatedDataLabel: 'Enrollments',
|
|
325
|
+
parentChildType: 'PRIMARY',
|
|
326
|
+
enableParentOwnerInheritance: false,
|
|
327
|
+
description: 'Which scheduled class this row belongs to',
|
|
328
|
+
section: enrollmentSessionSection,
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
const enrollmentMemberRef = new LookupField(enrollmentObj, {
|
|
332
|
+
apiName: 'member_ref__c',
|
|
333
|
+
displayName: 'Member',
|
|
334
|
+
description: 'Member field',
|
|
335
|
+
target: memberObj,
|
|
336
|
+
relatedDataLabel: 'Class enrollments',
|
|
337
|
+
required: true,
|
|
338
|
+
section: enrollmentSessionSection,
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
const enrollmentAttendanceField = new RadioField(enrollmentObj, {
|
|
342
|
+
apiName: 'attendance_status__c',
|
|
343
|
+
displayName: 'Attendance',
|
|
344
|
+
options: ['Registered', 'Checked in', 'Late', 'No-show', 'Cancelled'],
|
|
345
|
+
required: true,
|
|
346
|
+
description: 'Front desk: set to Checked in when the member arrives',
|
|
347
|
+
section: enrollmentAttendanceSection,
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
const enrollmentCheckedInAt = new DatetimeField(enrollmentObj, {
|
|
351
|
+
apiName: 'checked_in_at__c',
|
|
352
|
+
displayName: 'Checked in at',
|
|
353
|
+
description: 'Timestamp when staff recorded arrival (optional)',
|
|
354
|
+
section: enrollmentAttendanceSection,
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
const enrollmentNotesField = new LongTextField(enrollmentObj, {
|
|
358
|
+
apiName: 'enrollment_notes__c',
|
|
359
|
+
displayName: 'Notes',
|
|
360
|
+
description: 'Notes field',
|
|
361
|
+
maxLength: 2000,
|
|
362
|
+
section: enrollmentAttendanceSection,
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
const enrollmentRosterTitle = new FormulaField(enrollmentObj, {
|
|
366
|
+
apiName: 'roster_row_label__c',
|
|
367
|
+
displayName: 'Roster row label',
|
|
368
|
+
description: 'Roster row label field',
|
|
369
|
+
fieldType: 'TEXT',
|
|
370
|
+
maxLength: 160,
|
|
371
|
+
formula: "CONCATENATE(attendance_status__c, ' · Enrollment')",
|
|
372
|
+
section: enrollmentAttendanceSection,
|
|
53
373
|
});
|
|
54
374
|
|
|
55
375
|
// ── Rollups ─────────────────────────────────────────────────────────────────
|
|
56
|
-
const enrollmentCountOnSession = new SummaryField(
|
|
376
|
+
const enrollmentCountOnSession = new SummaryField(sessionObj, {
|
|
57
377
|
apiName: 'enrollment_count__c',
|
|
58
378
|
displayName: 'Enrolled (count)',
|
|
59
|
-
aggregates:
|
|
379
|
+
aggregates: enrollmentMemberRef,
|
|
60
380
|
using: 'COUNT',
|
|
61
|
-
lookup:
|
|
381
|
+
lookup: enrollmentSessionRef,
|
|
62
382
|
description: 'Rows on this session’s roster',
|
|
63
|
-
section:
|
|
383
|
+
section: sessionScheduleSection,
|
|
64
384
|
});
|
|
65
385
|
|
|
66
386
|
// Note: Rollups from session → trainer would require a parent–child edge from
|
|
67
387
|
// session to trainer; trainer is linked via LookupField instead, so session
|
|
68
388
|
// counts per trainer are surfaced via session list views and SDUI, not a rollup.
|
|
69
389
|
|
|
70
|
-
// ── Validations & defaults
|
|
71
|
-
|
|
390
|
+
// ── Validations & defaults ────────────────────────────────────────────────────
|
|
391
|
+
new Validation(sessionObj, {
|
|
72
392
|
ruleId: 'gym_session_end_after_start',
|
|
73
393
|
displayName: 'End time must be after start',
|
|
74
|
-
|
|
394
|
+
rqlFormula: '(end_time__c <= start_time__c)',
|
|
75
395
|
errorMessage: 'End time must be after the start time.',
|
|
76
396
|
ruleDescription: 'Prevents zero-length or inverted intervals',
|
|
77
397
|
state: 'ACTIVE',
|
|
78
398
|
level: 'FIELD',
|
|
79
|
-
|
|
399
|
+
fieldRef: sessionEndField,
|
|
80
400
|
});
|
|
81
401
|
|
|
82
|
-
|
|
83
|
-
defineTypedRule(enrollment, {
|
|
402
|
+
new Rule(enrollmentObj, {
|
|
84
403
|
flowId: 'gym_default_enrollment_status',
|
|
85
404
|
flowName: 'Default attendance to Registered',
|
|
86
405
|
triggerType: 'CREATE',
|
|
87
406
|
description: 'New roster rows start as Registered unless changed',
|
|
88
|
-
actions: [
|
|
407
|
+
actions: [{ targetField: enrollmentAttendanceField, fixedValue: 'Registered' }],
|
|
89
408
|
});
|
|
90
409
|
|
|
91
|
-
// ── List views
|
|
92
|
-
|
|
410
|
+
// ── List views ───────────────────────────────────────────────────────────────
|
|
411
|
+
new ListViewDef(memberObj, {
|
|
93
412
|
viewId: 'view_gym_all_members',
|
|
94
413
|
name: 'All members',
|
|
95
414
|
description: 'Directory with membership status',
|
|
96
|
-
fields: [
|
|
415
|
+
fields: [
|
|
416
|
+
'name',
|
|
417
|
+
memberEmail,
|
|
418
|
+
memberPhone,
|
|
419
|
+
memberStatusField,
|
|
420
|
+
memberPreferredClassTypesField,
|
|
421
|
+
memberJoinDate,
|
|
422
|
+
],
|
|
97
423
|
orderBy: 'name',
|
|
98
424
|
sortOrder: 'ASC',
|
|
99
425
|
isPublic: true,
|
|
100
426
|
objectScope: 'all',
|
|
101
427
|
});
|
|
102
428
|
|
|
103
|
-
|
|
429
|
+
new ListViewDef(trainerObj, {
|
|
104
430
|
viewId: 'view_gym_all_trainers',
|
|
105
431
|
name: 'All trainers',
|
|
106
432
|
description: 'Staff roster with session counts',
|
|
107
|
-
fields: ['name',
|
|
433
|
+
fields: ['name', trainerEmailField, trainerSpecialtyField, trainerLabelField],
|
|
108
434
|
orderBy: 'name',
|
|
109
435
|
sortOrder: 'ASC',
|
|
110
436
|
isPublic: true,
|
|
111
437
|
objectScope: 'all',
|
|
112
438
|
});
|
|
113
439
|
|
|
114
|
-
|
|
440
|
+
new ListViewDef(sessionObj, {
|
|
115
441
|
viewId: 'view_gym_all_sessions',
|
|
116
442
|
name: 'All class sessions',
|
|
117
443
|
description: 'Chronological schedule with trainer and enrollments',
|
|
118
444
|
fields: [
|
|
119
445
|
'name',
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
446
|
+
sessionTrainerRef,
|
|
447
|
+
sessionStartField,
|
|
448
|
+
sessionEndField,
|
|
449
|
+
sessionClassTypeField,
|
|
450
|
+
sessionRoomField,
|
|
451
|
+
sessionCapacityField,
|
|
126
452
|
enrollmentCountOnSession,
|
|
127
|
-
|
|
453
|
+
sessionBoardLabel,
|
|
128
454
|
],
|
|
129
|
-
orderBy:
|
|
455
|
+
orderBy: sessionStartField,
|
|
130
456
|
sortOrder: 'ASC',
|
|
131
457
|
isPublic: true,
|
|
132
458
|
objectScope: 'all',
|
|
133
459
|
});
|
|
134
460
|
|
|
135
|
-
|
|
461
|
+
new ListViewDef(sessionObj, {
|
|
136
462
|
viewId: 'view_gym_today_sessions',
|
|
137
463
|
name: 'Today’s class sessions',
|
|
138
464
|
description: 'Sessions whose calendar day is today — use with Today’s schedule SDUI tab',
|
|
139
465
|
fields: [
|
|
140
466
|
'name',
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
467
|
+
sessionTrainerRef,
|
|
468
|
+
sessionStartField,
|
|
469
|
+
sessionEndField,
|
|
470
|
+
sessionClassTypeField,
|
|
471
|
+
sessionRoomField,
|
|
146
472
|
enrollmentCountOnSession,
|
|
147
|
-
|
|
148
|
-
|
|
473
|
+
sessionBoardLabel,
|
|
474
|
+
sessionDayField,
|
|
149
475
|
],
|
|
150
|
-
orderBy:
|
|
476
|
+
orderBy: sessionStartField,
|
|
151
477
|
sortOrder: 'ASC',
|
|
152
478
|
isPublic: true,
|
|
153
479
|
objectScope: 'all',
|
|
154
|
-
|
|
480
|
+
rqlFilter: '(session_date__c == TODAY())',
|
|
155
481
|
});
|
|
156
482
|
|
|
157
|
-
|
|
483
|
+
new ListViewDef(enrollmentObj, {
|
|
158
484
|
viewId: 'view_gym_all_enrollments',
|
|
159
485
|
name: 'All enrollments',
|
|
160
486
|
description: 'Full roster grid',
|
|
161
487
|
fields: [
|
|
162
488
|
'name',
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
489
|
+
enrollmentSessionRef,
|
|
490
|
+
enrollmentMemberRef,
|
|
491
|
+
enrollmentAttendanceField,
|
|
492
|
+
enrollmentCheckedInAt,
|
|
493
|
+
enrollmentRosterTitle,
|
|
168
494
|
],
|
|
169
|
-
orderBy:
|
|
495
|
+
orderBy: enrollmentMemberRef,
|
|
170
496
|
sortOrder: 'ASC',
|
|
171
497
|
isPublic: true,
|
|
172
498
|
objectScope: 'all',
|
|
173
499
|
});
|
|
174
500
|
|
|
175
|
-
// ── Page layouts
|
|
176
|
-
|
|
501
|
+
// ── Page layouts ─────────────────────────────────────────────────────────────
|
|
502
|
+
new CustomObjectPageLayout(memberObj, {
|
|
177
503
|
apiName: 'default',
|
|
178
504
|
name: 'Member',
|
|
179
505
|
layoutId: 'layout_gym_member',
|
|
@@ -187,14 +513,20 @@ defineTypedPageLayout(member, {
|
|
|
187
513
|
{
|
|
188
514
|
name: 'Profile',
|
|
189
515
|
type: 'fields_section',
|
|
190
|
-
section:
|
|
191
|
-
fields: [
|
|
516
|
+
section: memberProfileSection,
|
|
517
|
+
fields: [
|
|
518
|
+
{ field: 'name', editable: true },
|
|
519
|
+
memberFirstName,
|
|
520
|
+
memberLastName,
|
|
521
|
+
memberEmail,
|
|
522
|
+
memberPhone,
|
|
523
|
+
],
|
|
192
524
|
},
|
|
193
525
|
{
|
|
194
526
|
name: 'Membership',
|
|
195
527
|
type: 'fields_section',
|
|
196
|
-
section:
|
|
197
|
-
fields: [
|
|
528
|
+
section: memberMembershipSection,
|
|
529
|
+
fields: [memberStatusField, memberPreferredClassTypesField, memberJoinDate, memberEmergencyField],
|
|
198
530
|
},
|
|
199
531
|
],
|
|
200
532
|
},
|
|
@@ -205,7 +537,7 @@ defineTypedPageLayout(member, {
|
|
|
205
537
|
visibilityConditions: {},
|
|
206
538
|
});
|
|
207
539
|
|
|
208
|
-
|
|
540
|
+
new CustomObjectPageLayout(trainerObj, {
|
|
209
541
|
apiName: 'default',
|
|
210
542
|
name: 'Trainer',
|
|
211
543
|
layoutId: 'layout_gym_trainer',
|
|
@@ -219,8 +551,14 @@ defineTypedPageLayout(trainer, {
|
|
|
219
551
|
{
|
|
220
552
|
name: 'Details',
|
|
221
553
|
type: 'fields_section',
|
|
222
|
-
section:
|
|
223
|
-
fields: [
|
|
554
|
+
section: trainerSection,
|
|
555
|
+
fields: [
|
|
556
|
+
{ field: 'name', editable: true },
|
|
557
|
+
trainerEmailField,
|
|
558
|
+
trainerSpecialtyField,
|
|
559
|
+
trainerLabelField,
|
|
560
|
+
trainerBioField,
|
|
561
|
+
],
|
|
224
562
|
},
|
|
225
563
|
],
|
|
226
564
|
},
|
|
@@ -231,7 +569,7 @@ defineTypedPageLayout(trainer, {
|
|
|
231
569
|
visibilityConditions: {},
|
|
232
570
|
});
|
|
233
571
|
|
|
234
|
-
|
|
572
|
+
new CustomObjectPageLayout(sessionObj, {
|
|
235
573
|
apiName: 'default',
|
|
236
574
|
name: 'Class session',
|
|
237
575
|
layoutId: 'layout_gym_class_session',
|
|
@@ -245,22 +583,22 @@ defineTypedPageLayout(session, {
|
|
|
245
583
|
{
|
|
246
584
|
name: 'Schedule',
|
|
247
585
|
type: 'fields_section',
|
|
248
|
-
section:
|
|
586
|
+
section: sessionScheduleSection,
|
|
249
587
|
fields: [
|
|
250
588
|
{ field: 'name', editable: true },
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
589
|
+
sessionTrainerRef,
|
|
590
|
+
sessionStartField,
|
|
591
|
+
sessionEndField,
|
|
592
|
+
sessionDayField,
|
|
593
|
+
sessionBoardLabel,
|
|
256
594
|
enrollmentCountOnSession,
|
|
257
595
|
],
|
|
258
596
|
},
|
|
259
597
|
{
|
|
260
598
|
name: 'Class & room',
|
|
261
599
|
type: 'fields_section',
|
|
262
|
-
section:
|
|
263
|
-
fields: [
|
|
600
|
+
section: sessionTrainerSection,
|
|
601
|
+
fields: [sessionClassTypeField, sessionRoomField, sessionCapacityField, sessionNotesField],
|
|
264
602
|
},
|
|
265
603
|
],
|
|
266
604
|
},
|
|
@@ -271,7 +609,7 @@ defineTypedPageLayout(session, {
|
|
|
271
609
|
visibilityConditions: {},
|
|
272
610
|
});
|
|
273
611
|
|
|
274
|
-
|
|
612
|
+
new CustomObjectPageLayout(enrollmentObj, {
|
|
275
613
|
apiName: 'default',
|
|
276
614
|
name: 'Enrollment',
|
|
277
615
|
layoutId: 'layout_gym_enrollment',
|
|
@@ -285,14 +623,19 @@ defineTypedPageLayout(enrollment, {
|
|
|
285
623
|
{
|
|
286
624
|
name: 'Session & member',
|
|
287
625
|
type: 'fields_section',
|
|
288
|
-
section:
|
|
289
|
-
fields: [{ field: 'name', editable: true },
|
|
626
|
+
section: enrollmentSessionSection,
|
|
627
|
+
fields: [{ field: 'name', editable: true }, enrollmentSessionRef, enrollmentMemberRef],
|
|
290
628
|
},
|
|
291
629
|
{
|
|
292
630
|
name: 'Attendance & check-in',
|
|
293
631
|
type: 'fields_section',
|
|
294
|
-
section:
|
|
295
|
-
fields: [
|
|
632
|
+
section: enrollmentAttendanceSection,
|
|
633
|
+
fields: [
|
|
634
|
+
enrollmentAttendanceField,
|
|
635
|
+
enrollmentCheckedInAt,
|
|
636
|
+
enrollmentRosterTitle,
|
|
637
|
+
enrollmentNotesField,
|
|
638
|
+
],
|
|
296
639
|
},
|
|
297
640
|
],
|
|
298
641
|
},
|
|
@@ -303,12 +646,16 @@ defineTypedPageLayout(enrollment, {
|
|
|
303
646
|
visibilityConditions: {},
|
|
304
647
|
});
|
|
305
648
|
|
|
306
|
-
// ── SDUI object-list tabs
|
|
649
|
+
// ── SDUI object-list tabs ───────────────────────────────────────────────────
|
|
307
650
|
const sduiObjectListDependencies = {
|
|
308
651
|
'@rippling/rippling-sdk': '^0.2.0-alpha.65',
|
|
309
652
|
'@rippling/pebble-sdui-web': '^0.9.2',
|
|
310
653
|
};
|
|
311
654
|
|
|
655
|
+
function loadFunctionCode(filename: string): string {
|
|
656
|
+
return fs.readFileSync(path.join(__dirname, 'functions', filename), 'utf-8');
|
|
657
|
+
}
|
|
658
|
+
|
|
312
659
|
function createObjectListPage(props: {
|
|
313
660
|
codeFilename: string;
|
|
314
661
|
functionApiName: string;
|
|
@@ -317,17 +664,20 @@ function createObjectListPage(props: {
|
|
|
317
664
|
pageId: string;
|
|
318
665
|
pageName: string;
|
|
319
666
|
}): SduiPage {
|
|
320
|
-
|
|
667
|
+
const listFn = new ManifestFunction(manifest, {
|
|
321
668
|
apiName: props.functionApiName,
|
|
322
669
|
name: props.functionName,
|
|
323
670
|
description: props.functionDescription,
|
|
324
|
-
|
|
325
|
-
codeFilename: props.codeFilename,
|
|
671
|
+
code: loadFunctionCode(props.codeFilename),
|
|
326
672
|
dependencies: sduiObjectListDependencies,
|
|
327
673
|
isAsync: false,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
return new SduiPage(manifest, {
|
|
677
|
+
sduiPageId: props.pageId,
|
|
678
|
+
name: props.pageName,
|
|
679
|
+
function: listFn,
|
|
680
|
+
});
|
|
331
681
|
}
|
|
332
682
|
|
|
333
683
|
const memberListPage = createObjectListPage({
|