@mj-biz-apps/forms-ng 0.0.0 → 0.2.0
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/dist/lib/builder/builder-models.d.ts +27 -0
- package/dist/lib/builder/builder-models.d.ts.map +1 -0
- package/dist/lib/builder/builder-models.js +15 -0
- package/dist/lib/builder/builder-models.js.map +1 -0
- package/dist/lib/builder/builder-state.service.d.ts +48 -0
- package/dist/lib/builder/builder-state.service.d.ts.map +1 -0
- package/dist/lib/builder/builder-state.service.js +231 -0
- package/dist/lib/builder/builder-state.service.js.map +1 -0
- package/dist/lib/builder/builder-styles.d.ts +12 -0
- package/dist/lib/builder/builder-styles.d.ts.map +1 -0
- package/dist/lib/builder/builder-styles.js +74 -0
- package/dist/lib/builder/builder-styles.js.map +1 -0
- package/dist/lib/builder/conditional-rule-editor.component.d.ts +53 -0
- package/dist/lib/builder/conditional-rule-editor.component.d.ts.map +1 -0
- package/dist/lib/builder/conditional-rule-editor.component.js +282 -0
- package/dist/lib/builder/conditional-rule-editor.component.js.map +1 -0
- package/dist/lib/builder/design-panel.component.d.ts +71 -0
- package/dist/lib/builder/design-panel.component.d.ts.map +1 -0
- package/dist/lib/builder/design-panel.component.js +530 -0
- package/dist/lib/builder/design-panel.component.js.map +1 -0
- package/dist/lib/builder/design-panel.styles.d.ts +10 -0
- package/dist/lib/builder/design-panel.styles.d.ts.map +1 -0
- package/dist/lib/builder/design-panel.styles.js +78 -0
- package/dist/lib/builder/design-panel.styles.js.map +1 -0
- package/dist/lib/builder/design-state.service.d.ts +51 -0
- package/dist/lib/builder/design-state.service.d.ts.map +1 -0
- package/dist/lib/builder/design-state.service.js +108 -0
- package/dist/lib/builder/design-state.service.js.map +1 -0
- package/dist/lib/builder/distribution-links.d.ts +29 -0
- package/dist/lib/builder/distribution-links.d.ts.map +1 -0
- package/dist/lib/builder/distribution-links.js +53 -0
- package/dist/lib/builder/distribution-links.js.map +1 -0
- package/dist/lib/builder/distribution-manager.component.d.ts +53 -0
- package/dist/lib/builder/distribution-manager.component.d.ts.map +1 -0
- package/dist/lib/builder/distribution-manager.component.js +330 -0
- package/dist/lib/builder/distribution-manager.component.js.map +1 -0
- package/dist/lib/builder/distribution.service.d.ts +62 -0
- package/dist/lib/builder/distribution.service.d.ts.map +1 -0
- package/dist/lib/builder/distribution.service.js +140 -0
- package/dist/lib/builder/distribution.service.js.map +1 -0
- package/dist/lib/builder/entity-names.d.ts +20 -0
- package/dist/lib/builder/entity-names.d.ts.map +1 -0
- package/dist/lib/builder/entity-names.js +20 -0
- package/dist/lib/builder/entity-names.js.map +1 -0
- package/dist/lib/builder/form-builder.component.d.ts +92 -0
- package/dist/lib/builder/form-builder.component.d.ts.map +1 -0
- package/dist/lib/builder/form-builder.component.js +627 -0
- package/dist/lib/builder/form-builder.component.js.map +1 -0
- package/dist/lib/builder/form-builder.styles.d.ts +3 -0
- package/dist/lib/builder/form-builder.styles.d.ts.map +1 -0
- package/dist/lib/builder/form-builder.styles.js +94 -0
- package/dist/lib/builder/form-builder.styles.js.map +1 -0
- package/dist/lib/builder/form-preview-modal.component.d.ts +25 -0
- package/dist/lib/builder/form-preview-modal.component.d.ts.map +1 -0
- package/dist/lib/builder/form-preview-modal.component.js +90 -0
- package/dist/lib/builder/form-preview-modal.component.js.map +1 -0
- package/dist/lib/builder/index.d.ts +31 -0
- package/dist/lib/builder/index.d.ts.map +1 -0
- package/dist/lib/builder/index.js +32 -0
- package/dist/lib/builder/index.js.map +1 -0
- package/dist/lib/builder/json-fields.d.ts +14 -0
- package/dist/lib/builder/json-fields.d.ts.map +1 -0
- package/dist/lib/builder/json-fields.js +100 -0
- package/dist/lib/builder/json-fields.js.map +1 -0
- package/dist/lib/builder/publish.service.d.ts +34 -0
- package/dist/lib/builder/publish.service.d.ts.map +1 -0
- package/dist/lib/builder/publish.service.js +110 -0
- package/dist/lib/builder/publish.service.js.map +1 -0
- package/dist/lib/builder/qr-code.d.ts +26 -0
- package/dist/lib/builder/qr-code.d.ts.map +1 -0
- package/dist/lib/builder/qr-code.js +361 -0
- package/dist/lib/builder/qr-code.js.map +1 -0
- package/dist/lib/builder/question-editor.component.d.ts +41 -0
- package/dist/lib/builder/question-editor.component.d.ts.map +1 -0
- package/dist/lib/builder/question-editor.component.js +228 -0
- package/dist/lib/builder/question-editor.component.js.map +1 -0
- package/dist/lib/builder/question-type-catalog.d.ts +29 -0
- package/dist/lib/builder/question-type-catalog.d.ts.map +1 -0
- package/dist/lib/builder/question-type-catalog.js +43 -0
- package/dist/lib/builder/question-type-catalog.js.map +1 -0
- package/dist/lib/builder/reorder.d.ts +10 -0
- package/dist/lib/builder/reorder.d.ts.map +1 -0
- package/dist/lib/builder/reorder.js +18 -0
- package/dist/lib/builder/reorder.js.map +1 -0
- package/dist/lib/builder/snapshot-builder.d.ts +16 -0
- package/dist/lib/builder/snapshot-builder.d.ts.map +1 -0
- package/dist/lib/builder/snapshot-builder.js +93 -0
- package/dist/lib/builder/snapshot-builder.js.map +1 -0
- package/dist/lib/builder/style-tokens.d.ts +54 -0
- package/dist/lib/builder/style-tokens.d.ts.map +1 -0
- package/dist/lib/builder/style-tokens.js +71 -0
- package/dist/lib/builder/style-tokens.js.map +1 -0
- package/dist/lib/builder/validation-rule-editor.component.d.ts +27 -0
- package/dist/lib/builder/validation-rule-editor.component.d.ts.map +1 -0
- package/dist/lib/builder/validation-rule-editor.component.js +179 -0
- package/dist/lib/builder/validation-rule-editor.component.js.map +1 -0
- package/dist/lib/dashboard/components/distribution-chart.component.d.ts +14 -0
- package/dist/lib/dashboard/components/distribution-chart.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/distribution-chart.component.js +85 -0
- package/dist/lib/dashboard/components/distribution-chart.component.js.map +1 -0
- package/dist/lib/dashboard/components/funnel-chart.component.d.ts +14 -0
- package/dist/lib/dashboard/components/funnel-chart.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/funnel-chart.component.js +101 -0
- package/dist/lib/dashboard/components/funnel-chart.component.js.map +1 -0
- package/dist/lib/dashboard/components/question-breakdown.component.d.ts +16 -0
- package/dist/lib/dashboard/components/question-breakdown.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/question-breakdown.component.js +213 -0
- package/dist/lib/dashboard/components/question-breakdown.component.js.map +1 -0
- package/dist/lib/dashboard/components/response-detail.component.d.ts +11 -0
- package/dist/lib/dashboard/components/response-detail.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/response-detail.component.js +113 -0
- package/dist/lib/dashboard/components/response-detail.component.js.map +1 -0
- package/dist/lib/dashboard/components/response-list.component.d.ts +27 -0
- package/dist/lib/dashboard/components/response-list.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/response-list.component.js +196 -0
- package/dist/lib/dashboard/components/response-list.component.js.map +1 -0
- package/dist/lib/dashboard/components/summary-stats.component.d.ts +12 -0
- package/dist/lib/dashboard/components/summary-stats.component.d.ts.map +1 -0
- package/dist/lib/dashboard/components/summary-stats.component.js +112 -0
- package/dist/lib/dashboard/components/summary-stats.component.js.map +1 -0
- package/dist/lib/dashboard/forms-reporting-dashboard.component.d.ts +64 -0
- package/dist/lib/dashboard/forms-reporting-dashboard.component.d.ts.map +1 -0
- package/dist/lib/dashboard/forms-reporting-dashboard.component.js +397 -0
- package/dist/lib/dashboard/forms-reporting-dashboard.component.js.map +1 -0
- package/dist/lib/dashboard/index.d.ts +19 -0
- package/dist/lib/dashboard/index.d.ts.map +1 -0
- package/dist/lib/dashboard/index.js +19 -0
- package/dist/lib/dashboard/index.js.map +1 -0
- package/dist/lib/dashboard/models/reporting.model.d.ts +125 -0
- package/dist/lib/dashboard/models/reporting.model.d.ts.map +1 -0
- package/dist/lib/dashboard/models/reporting.model.js +2 -0
- package/dist/lib/dashboard/models/reporting.model.js.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting-export.service.d.ts +21 -0
- package/dist/lib/dashboard/services/forms-reporting-export.service.d.ts.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting-export.service.js +83 -0
- package/dist/lib/dashboard/services/forms-reporting-export.service.js.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting-mock.d.ts +18 -0
- package/dist/lib/dashboard/services/forms-reporting-mock.d.ts.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting-mock.js +147 -0
- package/dist/lib/dashboard/services/forms-reporting-mock.js.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting.service.d.ts +45 -0
- package/dist/lib/dashboard/services/forms-reporting.service.d.ts.map +1 -0
- package/dist/lib/dashboard/services/forms-reporting.service.js +230 -0
- package/dist/lib/dashboard/services/forms-reporting.service.js.map +1 -0
- package/dist/lib/dashboard/services/reporting-aggregations.d.ts +40 -0
- package/dist/lib/dashboard/services/reporting-aggregations.d.ts.map +1 -0
- package/dist/lib/dashboard/services/reporting-aggregations.js +379 -0
- package/dist/lib/dashboard/services/reporting-aggregations.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js +104 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.js +83 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressLink/mjbizappscommonaddresslink.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js +96 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js +83 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js +96 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js +172 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js +90 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js +274 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js +91 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js +100 -0
- package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.js +174 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsForm/mjbizappsformsform.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.js +118 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormCategory/mjbizappsformsformcategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.js +93 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormDistribution/mjbizappsformsformdistribution.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.js +96 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormPage/mjbizappsformsformpage.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.js +132 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestion/mjbizappsformsformquestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.js +77 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormQuestionOption/mjbizappsformsformquestionoption.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.js +108 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponse/mjbizappsformsformresponse.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.js +99 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormResponseAnswer/mjbizappsformsformresponseanswer.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.js +100 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormStyle/mjbizappsformsformstyle.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.js +96 -0
- package/dist/lib/generated/Entities/mjBizAppsFormsFormVersion/mjbizappsformsformversion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.js +274 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTask/mjbizappstaskstask.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.js +67 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskActivity/mjbizappstaskstaskactivity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.js +90 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskAssignment/mjbizappstaskstaskassignment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.js +124 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskCategory/mjbizappstaskstaskcategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.js +86 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskComment/mjbizappstaskstaskcomment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.js +67 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecision/mjbizappstaskstaskdecision.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.js +86 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDecisionOutcome/mjbizappstaskstaskdecisionoutcome.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.js +61 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskDependency/mjbizappstaskstaskdependency.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.js +63 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskLink/mjbizappstaskstasklink.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.js +69 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationConfig/mjbizappstaskstasknotificationconfig.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.js +63 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskNotificationLog/mjbizappstaskstasknotificationlog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.js +98 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskRole/mjbizappstaskstaskrole.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.js +80 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTag/mjbizappstaskstasktag.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.js +59 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTagLink/mjbizappstaskstasktaglink.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.js +84 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplate/mjbizappstaskstasktemplate.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.js +146 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItem/mjbizappstaskstasktemplateitem.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.js +61 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemDependency/mjbizappstaskstasktemplateitemdependency.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.js +59 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskTemplateItemRole/mjbizappstaskstasktemplateitemrole.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.js +132 -0
- package/dist/lib/generated/Entities/mjBizAppsTasksTaskType/mjbizappstaskstasktype.form.component.js.map +1 -0
- package/dist/lib/generated/class-registrations-manifest.d.ts +6 -0
- package/dist/lib/generated/class-registrations-manifest.d.ts.map +1 -0
- package/dist/lib/generated/class-registrations-manifest.js +6 -0
- package/dist/lib/generated/class-registrations-manifest.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +61 -0
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -0
- package/dist/lib/generated/generated-forms.module.js +207 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -0
- package/dist/lib/home/forms-home-dashboard.component.d.ts +61 -0
- package/dist/lib/home/forms-home-dashboard.component.d.ts.map +1 -0
- package/dist/lib/home/forms-home-dashboard.component.js +379 -0
- package/dist/lib/home/forms-home-dashboard.component.js.map +1 -0
- package/dist/lib/home/forms-home.service.d.ts +24 -0
- package/dist/lib/home/forms-home.service.d.ts.map +1 -0
- package/dist/lib/home/forms-home.service.js +92 -0
- package/dist/lib/home/forms-home.service.js.map +1 -0
- package/dist/lib/home/home-aggregations.d.ts +23 -0
- package/dist/lib/home/home-aggregations.d.ts.map +1 -0
- package/dist/lib/home/home-aggregations.js +64 -0
- package/dist/lib/home/home-aggregations.js.map +1 -0
- package/dist/lib/home/home-models.d.ts +60 -0
- package/dist/lib/home/home-models.d.ts.map +1 -0
- package/dist/lib/home/home-models.js +34 -0
- package/dist/lib/home/home-models.js.map +1 -0
- package/dist/lib/home/index.d.ts +13 -0
- package/dist/lib/home/index.d.ts.map +1 -0
- package/dist/lib/home/index.js +13 -0
- package/dist/lib/home/index.js.map +1 -0
- package/dist/lib/widget/api/form-upload.service.d.ts +41 -0
- package/dist/lib/widget/api/form-upload.service.d.ts.map +1 -0
- package/dist/lib/widget/api/form-upload.service.js +124 -0
- package/dist/lib/widget/api/form-upload.service.js.map +1 -0
- package/dist/lib/widget/api/forms-api.config.d.ts +55 -0
- package/dist/lib/widget/api/forms-api.config.d.ts.map +1 -0
- package/dist/lib/widget/api/forms-api.config.js +40 -0
- package/dist/lib/widget/api/forms-api.config.js.map +1 -0
- package/dist/lib/widget/api/forms-api.graphql.service.d.ts +20 -0
- package/dist/lib/widget/api/forms-api.graphql.service.d.ts.map +1 -0
- package/dist/lib/widget/api/forms-api.graphql.service.js +96 -0
- package/dist/lib/widget/api/forms-api.graphql.service.js.map +1 -0
- package/dist/lib/widget/api/forms-api.interface.d.ts +45 -0
- package/dist/lib/widget/api/forms-api.interface.d.ts.map +1 -0
- package/dist/lib/widget/api/forms-api.interface.js +8 -0
- package/dist/lib/widget/api/forms-api.interface.js.map +1 -0
- package/dist/lib/widget/api/forms-api.mock.service.d.ts +12 -0
- package/dist/lib/widget/api/forms-api.mock.service.d.ts.map +1 -0
- package/dist/lib/widget/api/forms-api.mock.service.js +41 -0
- package/dist/lib/widget/api/forms-api.mock.service.js.map +1 -0
- package/dist/lib/widget/api/mock-form.data.d.ts +8 -0
- package/dist/lib/widget/api/mock-form.data.d.ts.map +1 -0
- package/dist/lib/widget/api/mock-form.data.js +192 -0
- package/dist/lib/widget/api/mock-form.data.js.map +1 -0
- package/dist/lib/widget/api/submission-mapping.d.ts +60 -0
- package/dist/lib/widget/api/submission-mapping.d.ts.map +1 -0
- package/dist/lib/widget/api/submission-mapping.js +47 -0
- package/dist/lib/widget/api/submission-mapping.js.map +1 -0
- package/dist/lib/widget/components/form-one-question.component.d.ts +43 -0
- package/dist/lib/widget/components/form-one-question.component.d.ts.map +1 -0
- package/dist/lib/widget/components/form-one-question.component.js +194 -0
- package/dist/lib/widget/components/form-one-question.component.js.map +1 -0
- package/dist/lib/widget/components/form-progress.component.d.ts +9 -0
- package/dist/lib/widget/components/form-progress.component.d.ts.map +1 -0
- package/dist/lib/widget/components/form-progress.component.js +47 -0
- package/dist/lib/widget/components/form-progress.component.js.map +1 -0
- package/dist/lib/widget/components/form-scroll.component.d.ts +23 -0
- package/dist/lib/widget/components/form-scroll.component.d.ts.map +1 -0
- package/dist/lib/widget/components/form-scroll.component.js +132 -0
- package/dist/lib/widget/components/form-scroll.component.js.map +1 -0
- package/dist/lib/widget/components/questions/form-question.component.d.ts +68 -0
- package/dist/lib/widget/components/questions/form-question.component.d.ts.map +1 -0
- package/dist/lib/widget/components/questions/form-question.component.js +541 -0
- package/dist/lib/widget/components/questions/form-question.component.js.map +1 -0
- package/dist/lib/widget/components/questions/input-mode.d.ts +13 -0
- package/dist/lib/widget/components/questions/input-mode.d.ts.map +1 -0
- package/dist/lib/widget/components/questions/input-mode.js +42 -0
- package/dist/lib/widget/components/questions/input-mode.js.map +1 -0
- package/dist/lib/widget/components/turnstile-challenge.component.d.ts +52 -0
- package/dist/lib/widget/components/turnstile-challenge.component.d.ts.map +1 -0
- package/dist/lib/widget/components/turnstile-challenge.component.js +123 -0
- package/dist/lib/widget/components/turnstile-challenge.component.js.map +1 -0
- package/dist/lib/widget/core/answer-value.d.ts +17 -0
- package/dist/lib/widget/core/answer-value.d.ts.map +1 -0
- package/dist/lib/widget/core/answer-value.js +41 -0
- package/dist/lib/widget/core/answer-value.js.map +1 -0
- package/dist/lib/widget/core/autosave-controller.d.ts +65 -0
- package/dist/lib/widget/core/autosave-controller.d.ts.map +1 -0
- package/dist/lib/widget/core/autosave-controller.js +134 -0
- package/dist/lib/widget/core/autosave-controller.js.map +1 -0
- package/dist/lib/widget/core/client-id.d.ts +17 -0
- package/dist/lib/widget/core/client-id.d.ts.map +1 -0
- package/dist/lib/widget/core/client-id.js +52 -0
- package/dist/lib/widget/core/client-id.js.map +1 -0
- package/dist/lib/widget/core/form-runtime.d.ts +34 -0
- package/dist/lib/widget/core/form-runtime.d.ts.map +1 -0
- package/dist/lib/widget/core/form-runtime.js +123 -0
- package/dist/lib/widget/core/form-runtime.js.map +1 -0
- package/dist/lib/widget/core/one-question-stepper.d.ts +20 -0
- package/dist/lib/widget/core/one-question-stepper.d.ts.map +1 -0
- package/dist/lib/widget/core/one-question-stepper.js +23 -0
- package/dist/lib/widget/core/one-question-stepper.js.map +1 -0
- package/dist/lib/widget/core/submit-phase.d.ts +31 -0
- package/dist/lib/widget/core/submit-phase.d.ts.map +1 -0
- package/dist/lib/widget/core/submit-phase.js +21 -0
- package/dist/lib/widget/core/submit-phase.js.map +1 -0
- package/dist/lib/widget/core/theming.d.ts +17 -0
- package/dist/lib/widget/core/theming.d.ts.map +1 -0
- package/dist/lib/widget/core/theming.js +36 -0
- package/dist/lib/widget/core/theming.js.map +1 -0
- package/dist/lib/widget/core/turnstile-gate.d.ts +42 -0
- package/dist/lib/widget/core/turnstile-gate.d.ts.map +1 -0
- package/dist/lib/widget/core/turnstile-gate.js +61 -0
- package/dist/lib/widget/core/turnstile-gate.js.map +1 -0
- package/dist/lib/widget/core/turnstile-loader.d.ts +34 -0
- package/dist/lib/widget/core/turnstile-loader.d.ts.map +1 -0
- package/dist/lib/widget/core/turnstile-loader.js +68 -0
- package/dist/lib/widget/core/turnstile-loader.js.map +1 -0
- package/dist/lib/widget/core/validation.d.ts +19 -0
- package/dist/lib/widget/core/validation.d.ts.map +1 -0
- package/dist/lib/widget/core/validation.js +105 -0
- package/dist/lib/widget/core/validation.js.map +1 -0
- package/dist/lib/widget/index.d.ts +27 -0
- package/dist/lib/widget/index.d.ts.map +1 -0
- package/dist/lib/widget/index.js +30 -0
- package/dist/lib/widget/index.js.map +1 -0
- package/dist/lib/widget/mj-form.component.d.ts +114 -0
- package/dist/lib/widget/mj-form.component.d.ts.map +1 -0
- package/dist/lib/widget/mj-form.component.js +428 -0
- package/dist/lib/widget/mj-form.component.js.map +1 -0
- package/dist/lib/widget/register-element.d.ts +8 -0
- package/dist/lib/widget/register-element.d.ts.map +1 -0
- package/dist/lib/widget/register-element.js +98 -0
- package/dist/lib/widget/register-element.js.map +1 -0
- package/dist/public-api.d.ts +23 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +33 -0
- package/dist/public-api.js.map +1 -0
- package/dist/widget-entry.d.ts +2 -0
- package/dist/widget-entry.d.ts.map +1 -0
- package/dist/widget-entry.js +20 -0
- package/dist/widget-entry.js.map +1 -0
- package/package.json +53 -5
- package/README.md +0 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Builds a fast id→name map from the categories result. */
|
|
2
|
+
export function categoryNameMap(categories) {
|
|
3
|
+
const map = new Map();
|
|
4
|
+
for (const c of categories) {
|
|
5
|
+
map.set(c.ID, c.Name);
|
|
6
|
+
}
|
|
7
|
+
return map;
|
|
8
|
+
}
|
|
9
|
+
/** Counts responses per form id. */
|
|
10
|
+
export function responseCountMap(responses) {
|
|
11
|
+
const map = new Map();
|
|
12
|
+
for (const r of responses) {
|
|
13
|
+
map.set(r.FormID, (map.get(r.FormID) ?? 0) + 1);
|
|
14
|
+
}
|
|
15
|
+
return map;
|
|
16
|
+
}
|
|
17
|
+
/** Coerces a RunView date cell (string or Date) into a Date, or null. */
|
|
18
|
+
export function toDate(value) {
|
|
19
|
+
if (value == null) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const d = value instanceof Date ? value : new Date(value);
|
|
23
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Folds the three simple result sets into display rows, newest first.
|
|
27
|
+
*/
|
|
28
|
+
export function buildFormRows(forms, categories, responses) {
|
|
29
|
+
const catName = categoryNameMap(categories);
|
|
30
|
+
const counts = responseCountMap(responses);
|
|
31
|
+
const rows = forms.map((f) => ({
|
|
32
|
+
id: f.ID,
|
|
33
|
+
name: f.Name,
|
|
34
|
+
status: f.Status,
|
|
35
|
+
categoryName: f.CategoryID ? (catName.get(f.CategoryID) ?? null) : null,
|
|
36
|
+
updatedAt: toDate(f.__mj_UpdatedAt),
|
|
37
|
+
responseCount: counts.get(f.ID) ?? 0,
|
|
38
|
+
}));
|
|
39
|
+
return sortByUpdatedDesc(rows);
|
|
40
|
+
}
|
|
41
|
+
/** Newest-updated first; rows without a date sort last, then by name. */
|
|
42
|
+
export function sortByUpdatedDesc(rows) {
|
|
43
|
+
return [...rows].sort((a, b) => {
|
|
44
|
+
const at = a.updatedAt?.getTime() ?? 0;
|
|
45
|
+
const bt = b.updatedAt?.getTime() ?? 0;
|
|
46
|
+
if (bt !== at) {
|
|
47
|
+
return bt - at;
|
|
48
|
+
}
|
|
49
|
+
return a.name.localeCompare(b.name);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Extracts the `FormID` output parameter produced by the authoring/template
|
|
54
|
+
* actions. Both actions set an output param named `FormID`.
|
|
55
|
+
*/
|
|
56
|
+
export function readFormIdFromParams(params) {
|
|
57
|
+
if (!params) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const hit = params.find((p) => p.Name === 'FormID' && (p.Type === 'Output' || p.Type === 'Both'));
|
|
61
|
+
const value = hit?.Value;
|
|
62
|
+
return typeof value === 'string' && value.length > 0 ? value : null;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=home-aggregations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-aggregations.js","sourceRoot":"","sources":["../../../src/lib/home/home-aggregations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-models for the Forms home/studio surface (the first-class Explorer
|
|
3
|
+
* "Forms" tab — FORMS_BUILD_PLAN §3.2).
|
|
4
|
+
*
|
|
5
|
+
* These are deliberately decoupled from the generated `mjBizAppsForms*` entity
|
|
6
|
+
* types: the home grid is read-only and loaded via `RunView` with
|
|
7
|
+
* `ResultType: 'simple'`, so a small hand-written shape keeps this work
|
|
8
|
+
* independent of CodeGen output while staying strongly typed (no `any`).
|
|
9
|
+
*/
|
|
10
|
+
/** Entity names (PHASE1_DECOMPOSITION entity-name table). */
|
|
11
|
+
export declare const HOME_ENTITY: {
|
|
12
|
+
readonly forms: "MJ_BizApps_Forms: Forms";
|
|
13
|
+
readonly categories: "MJ_BizApps_Forms: Form Categories";
|
|
14
|
+
readonly responses: "MJ_BizApps_Forms: Form Responses";
|
|
15
|
+
readonly actions: "MJ: Actions";
|
|
16
|
+
};
|
|
17
|
+
/** Action names (registered by WP-C; see packages/Actions custom/authoring + templates). */
|
|
18
|
+
export declare const HOME_ACTION: {
|
|
19
|
+
readonly generateFromBrief: "Forms: Generate Form From Brief";
|
|
20
|
+
readonly createFromTemplate: "Forms: Create Form From Template";
|
|
21
|
+
};
|
|
22
|
+
/** A single row in the Forms home grid. */
|
|
23
|
+
export interface FormSummaryRow {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
status: string;
|
|
27
|
+
categoryName: string | null;
|
|
28
|
+
updatedAt: Date | null;
|
|
29
|
+
responseCount: number;
|
|
30
|
+
}
|
|
31
|
+
/** Raw `Forms` columns pulled by the simple RunView (subset we display). */
|
|
32
|
+
export interface FormSimpleRecord {
|
|
33
|
+
ID: string;
|
|
34
|
+
Name: string;
|
|
35
|
+
Status: string;
|
|
36
|
+
CategoryID: string | null;
|
|
37
|
+
__mj_UpdatedAt: Date | string | null;
|
|
38
|
+
}
|
|
39
|
+
/** Raw `Form Categories` columns for name resolution. */
|
|
40
|
+
export interface FormCategorySimpleRecord {
|
|
41
|
+
ID: string;
|
|
42
|
+
Name: string;
|
|
43
|
+
}
|
|
44
|
+
/** Raw `Form Responses` columns for per-form counts. */
|
|
45
|
+
export interface FormResponseSimpleRecord {
|
|
46
|
+
FormID: string;
|
|
47
|
+
}
|
|
48
|
+
/** A starter template the user can scaffold from. */
|
|
49
|
+
export interface StarterTemplateChoice {
|
|
50
|
+
key: string;
|
|
51
|
+
label: string;
|
|
52
|
+
icon: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Curated starter gallery shown in the "From template" picker. Keys MUST match
|
|
56
|
+
* the keys the `Forms: Create Form From Template` action knows (WP-C
|
|
57
|
+
* starter-templates.ts: contact, rsvp, nps, lead-capture, application).
|
|
58
|
+
*/
|
|
59
|
+
export declare const STARTER_TEMPLATES: readonly StarterTemplateChoice[];
|
|
60
|
+
//# sourceMappingURL=home-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-models.d.ts","sourceRoot":"","sources":["../../../src/lib/home/home-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6DAA6D;AAC7D,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,4FAA4F;AAC5F,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,yDAAyD;AACzD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wDAAwD;AACxD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,qBAAqB,EAMpD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-models for the Forms home/studio surface (the first-class Explorer
|
|
3
|
+
* "Forms" tab — FORMS_BUILD_PLAN §3.2).
|
|
4
|
+
*
|
|
5
|
+
* These are deliberately decoupled from the generated `mjBizAppsForms*` entity
|
|
6
|
+
* types: the home grid is read-only and loaded via `RunView` with
|
|
7
|
+
* `ResultType: 'simple'`, so a small hand-written shape keeps this work
|
|
8
|
+
* independent of CodeGen output while staying strongly typed (no `any`).
|
|
9
|
+
*/
|
|
10
|
+
/** Entity names (PHASE1_DECOMPOSITION entity-name table). */
|
|
11
|
+
export const HOME_ENTITY = {
|
|
12
|
+
forms: 'MJ_BizApps_Forms: Forms',
|
|
13
|
+
categories: 'MJ_BizApps_Forms: Form Categories',
|
|
14
|
+
responses: 'MJ_BizApps_Forms: Form Responses',
|
|
15
|
+
actions: 'MJ: Actions',
|
|
16
|
+
};
|
|
17
|
+
/** Action names (registered by WP-C; see packages/Actions custom/authoring + templates). */
|
|
18
|
+
export const HOME_ACTION = {
|
|
19
|
+
generateFromBrief: 'Forms: Generate Form From Brief',
|
|
20
|
+
createFromTemplate: 'Forms: Create Form From Template',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Curated starter gallery shown in the "From template" picker. Keys MUST match
|
|
24
|
+
* the keys the `Forms: Create Form From Template` action knows (WP-C
|
|
25
|
+
* starter-templates.ts: contact, rsvp, nps, lead-capture, application).
|
|
26
|
+
*/
|
|
27
|
+
export const STARTER_TEMPLATES = [
|
|
28
|
+
{ key: 'contact', label: 'Contact form', icon: 'fa-solid fa-envelope' },
|
|
29
|
+
{ key: 'rsvp', label: 'Event RSVP', icon: 'fa-solid fa-calendar-check' },
|
|
30
|
+
{ key: 'nps', label: 'NPS / feedback', icon: 'fa-solid fa-gauge-high' },
|
|
31
|
+
{ key: 'lead-capture', label: 'Lead capture', icon: 'fa-solid fa-magnet' },
|
|
32
|
+
{ key: 'application', label: 'Application', icon: 'fa-solid fa-file-signature' },
|
|
33
|
+
];
|
|
34
|
+
//# sourceMappingURL=home-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-models.js","sourceRoot":"","sources":["../../../src/lib/home/home-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,yBAAyB;IAChC,UAAU,EAAE,mCAAmC;IAC/C,SAAS,EAAE,kCAAkC;IAC7C,OAAO,EAAE,aAAa;CACd,CAAC;AAEX,4FAA4F;AAC5F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,iBAAiB,EAAE,iCAAiC;IACpD,kBAAkB,EAAE,kCAAkC;CAC9C,CAAC;AAuCX;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,sBAAsB,EAAE;IACvE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,4BAA4B,EAAE;IACxE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,wBAAwB,EAAE;IACvE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC1E,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,4BAA4B,EAAE;CACxE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forms home/studio surface public barrel.
|
|
3
|
+
*
|
|
4
|
+
* Importing this barrel triggers the
|
|
5
|
+
* `@RegisterClass(BaseDashboard, 'FormsHomeDashboard')` decorator on the
|
|
6
|
+
* dashboard component, making it resolvable by the MJ ClassFactory from the
|
|
7
|
+
* `MJ: Dashboards` metadata record's DriverClass.
|
|
8
|
+
*/
|
|
9
|
+
export * from './home-models';
|
|
10
|
+
export * from './home-aggregations';
|
|
11
|
+
export * from './forms-home.service';
|
|
12
|
+
export * from './forms-home-dashboard.component';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/home/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forms home/studio surface public barrel.
|
|
3
|
+
*
|
|
4
|
+
* Importing this barrel triggers the
|
|
5
|
+
* `@RegisterClass(BaseDashboard, 'FormsHomeDashboard')` decorator on the
|
|
6
|
+
* dashboard component, making it resolvable by the MJ ClassFactory from the
|
|
7
|
+
* `MJ: Dashboards` metadata record's DriverClass.
|
|
8
|
+
*/
|
|
9
|
+
export * from './home-models';
|
|
10
|
+
export * from './home-aggregations';
|
|
11
|
+
export * from './forms-home.service';
|
|
12
|
+
export * from './forms-home-dashboard.component';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/home/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/** Metadata the server returns for a successfully-stored upload. */
|
|
3
|
+
export interface UploadedFile {
|
|
4
|
+
fileId: string;
|
|
5
|
+
name: string;
|
|
6
|
+
size: number;
|
|
7
|
+
contentType: string;
|
|
8
|
+
}
|
|
9
|
+
/** Progress callback: fraction 0–1 of bytes sent, or `null` when indeterminate. */
|
|
10
|
+
export type UploadProgress = (fraction: number | null) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Build the multipart body for an upload. Pure + framework-free so the field wiring
|
|
13
|
+
* (which the server matches on) is unit-testable. Field names mirror the WP-B seam:
|
|
14
|
+
* `file`, `distributionSlug`, `questionId`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildUploadFormData(file: File, distributionSlug: string, questionId: string): FormData;
|
|
17
|
+
/**
|
|
18
|
+
* Parse the raw `POST /forms/upload` JSON response into an {@link UploadedFile},
|
|
19
|
+
* throwing a respondent-friendly error when the shape is wrong. Pure + testable.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseUploadResponse(raw: unknown): UploadedFile;
|
|
22
|
+
export declare class FormUploadService {
|
|
23
|
+
private readonly config;
|
|
24
|
+
/** True when the widget has an endpoint + token to upload with. */
|
|
25
|
+
get canUpload(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Upload one file for a FileUpload question. Resolves with the stored file's
|
|
28
|
+
* metadata (store `fileId` as the answer) or rejects with a friendly Error the
|
|
29
|
+
* caller can surface inline for retry.
|
|
30
|
+
*/
|
|
31
|
+
upload(file: File, distributionSlug: string, questionId: string, onProgress?: UploadProgress): Promise<UploadedFile>;
|
|
32
|
+
/** The resolved upload endpoint (explicit config wins; else derived from GraphQL URL). */
|
|
33
|
+
private endpoint;
|
|
34
|
+
/** XHR POST with upload-progress + typed JSON parsing. */
|
|
35
|
+
private send;
|
|
36
|
+
/** Read the XHR body whether it arrived as parsed JSON or a raw string. */
|
|
37
|
+
private readBody;
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FormUploadService, never>;
|
|
39
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<FormUploadService>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=form-upload.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-upload.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/widget/api/form-upload.service.ts"],"names":[],"mappings":";AAiBA,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,QAAQ,CAMV;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAe9D;AAED,qBACa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAEnD,mEAAmE;IACnE,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;OAIG;IACI,MAAM,CACX,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,YAAY,CAAC;IASxB,0FAA0F;IAC1F,OAAO,CAAC,QAAQ;IAIhB,0DAA0D;IAC1D,OAAO,CAAC,IAAI;IAgCZ,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;yCAlEL,iBAAiB;6CAAjB,iBAAiB;CAgF7B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymous file-upload transport for FileUpload questions.
|
|
3
|
+
*
|
|
4
|
+
* The widget cannot use the GraphQL transport for binary uploads, so it POSTs a
|
|
5
|
+
* `multipart/form-data` body to MJAPI's `POST /forms/upload` route (seam with WP-B),
|
|
6
|
+
* authenticated by the SAME anonymous magic-link bearer token the GraphQL transport
|
|
7
|
+
* uses ({@link FormsApiConfig.token}). The server stores the file as an `MJ: Files`
|
|
8
|
+
* record scoped to the distribution and returns its `fileId`, which the widget stores
|
|
9
|
+
* as the question's answer value (mapped to `FormResponseAnswer.FileID` at submit).
|
|
10
|
+
*
|
|
11
|
+
* `XMLHttpRequest` is used rather than `fetch` solely because it exposes upload
|
|
12
|
+
* progress events, which the respondent-facing UI needs for a real progress bar.
|
|
13
|
+
*/
|
|
14
|
+
import { Injectable, inject } from '@angular/core';
|
|
15
|
+
import { FORMS_API_CONFIG, deriveUploadUrl } from './forms-api.config';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
/**
|
|
18
|
+
* Build the multipart body for an upload. Pure + framework-free so the field wiring
|
|
19
|
+
* (which the server matches on) is unit-testable. Field names mirror the WP-B seam:
|
|
20
|
+
* `file`, `distributionSlug`, `questionId`.
|
|
21
|
+
*/
|
|
22
|
+
export function buildUploadFormData(file, distributionSlug, questionId) {
|
|
23
|
+
const body = new FormData();
|
|
24
|
+
body.append('file', file, file.name);
|
|
25
|
+
body.append('distributionSlug', distributionSlug);
|
|
26
|
+
body.append('questionId', questionId);
|
|
27
|
+
return body;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse the raw `POST /forms/upload` JSON response into an {@link UploadedFile},
|
|
31
|
+
* throwing a respondent-friendly error when the shape is wrong. Pure + testable.
|
|
32
|
+
*/
|
|
33
|
+
export function parseUploadResponse(raw) {
|
|
34
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
35
|
+
throw new Error('Upload failed: unexpected server response.');
|
|
36
|
+
}
|
|
37
|
+
const obj = raw;
|
|
38
|
+
const fileId = obj['fileId'];
|
|
39
|
+
if (typeof fileId !== 'string' || fileId.length === 0) {
|
|
40
|
+
throw new Error('Upload failed: no file id returned.');
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
fileId,
|
|
44
|
+
name: typeof obj['name'] === 'string' ? obj['name'] : '',
|
|
45
|
+
size: typeof obj['size'] === 'number' ? obj['size'] : 0,
|
|
46
|
+
contentType: typeof obj['contentType'] === 'string' ? obj['contentType'] : '',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export class FormUploadService {
|
|
50
|
+
config = inject(FORMS_API_CONFIG);
|
|
51
|
+
/** True when the widget has an endpoint + token to upload with. */
|
|
52
|
+
get canUpload() {
|
|
53
|
+
return !!this.endpoint() && !!this.config.token;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Upload one file for a FileUpload question. Resolves with the stored file's
|
|
57
|
+
* metadata (store `fileId` as the answer) or rejects with a friendly Error the
|
|
58
|
+
* caller can surface inline for retry.
|
|
59
|
+
*/
|
|
60
|
+
upload(file, distributionSlug, questionId, onProgress) {
|
|
61
|
+
const url = this.endpoint();
|
|
62
|
+
if (!url) {
|
|
63
|
+
return Promise.reject(new Error('Uploads are not available for this form.'));
|
|
64
|
+
}
|
|
65
|
+
const body = buildUploadFormData(file, distributionSlug, questionId);
|
|
66
|
+
return this.send(url, body, onProgress);
|
|
67
|
+
}
|
|
68
|
+
/** The resolved upload endpoint (explicit config wins; else derived from GraphQL URL). */
|
|
69
|
+
endpoint() {
|
|
70
|
+
return this.config.uploadUrl || deriveUploadUrl(this.config.graphqlUrl);
|
|
71
|
+
}
|
|
72
|
+
/** XHR POST with upload-progress + typed JSON parsing. */
|
|
73
|
+
send(url, body, onProgress) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const xhr = new XMLHttpRequest();
|
|
76
|
+
xhr.open('POST', url);
|
|
77
|
+
if (this.config.token) {
|
|
78
|
+
xhr.setRequestHeader('Authorization', `Bearer ${this.config.token}`);
|
|
79
|
+
}
|
|
80
|
+
xhr.responseType = 'json';
|
|
81
|
+
if (xhr.upload && onProgress) {
|
|
82
|
+
xhr.upload.onprogress = (e) => onProgress(e.lengthComputable && e.total > 0 ? e.loaded / e.total : null);
|
|
83
|
+
}
|
|
84
|
+
xhr.onload = () => {
|
|
85
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
86
|
+
try {
|
|
87
|
+
resolve(parseUploadResponse(this.readBody(xhr)));
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
reject(err instanceof Error ? err : new Error('Upload failed.'));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
reject(new Error(`Upload failed (HTTP ${xhr.status}). Please try again.`));
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
xhr.onerror = () => reject(new Error('Upload failed. Check your connection and try again.'));
|
|
98
|
+
xhr.onabort = () => reject(new Error('Upload cancelled.'));
|
|
99
|
+
xhr.send(body);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Read the XHR body whether it arrived as parsed JSON or a raw string. */
|
|
103
|
+
readBody(xhr) {
|
|
104
|
+
if (xhr.response && typeof xhr.response === 'object') {
|
|
105
|
+
return xhr.response;
|
|
106
|
+
}
|
|
107
|
+
const text = typeof xhr.responseText === 'string' ? xhr.responseText : '';
|
|
108
|
+
if (!text) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
return JSON.parse(text);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
throw new Error('Upload failed: could not read server response.');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
static ɵfac = function FormUploadService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormUploadService)(); };
|
|
119
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormUploadService, factory: FormUploadService.ɵfac });
|
|
120
|
+
}
|
|
121
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormUploadService, [{
|
|
122
|
+
type: Injectable
|
|
123
|
+
}], null, null); })();
|
|
124
|
+
//# sourceMappingURL=form-upload.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-upload.service.js","sourceRoot":"","sources":["../../../../src/lib/widget/api/form-upload.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection config for the real GraphQL transport.
|
|
3
|
+
*
|
|
4
|
+
* The widget is an embeddable, anonymous custom element: it talks to the MJAPI
|
|
5
|
+
* GraphQL endpoint directly over `fetch`, authenticated by an anonymous magic-link
|
|
6
|
+
* bearer token (the per-form public-link token), NOT by an Explorer session. These
|
|
7
|
+
* two values come from the `<mj-form>` element attributes (`api-url`, `token`).
|
|
8
|
+
*/
|
|
9
|
+
import { InjectionToken } from '@angular/core';
|
|
10
|
+
/** Resolved connection settings for {@link FormsGraphQLApiService}. */
|
|
11
|
+
export interface FormsApiConfig {
|
|
12
|
+
/** Absolute URL of the MJAPI GraphQL endpoint, e.g. `https://api.example.com/graphql`. */
|
|
13
|
+
graphqlUrl: string;
|
|
14
|
+
/**
|
|
15
|
+
* Anonymous magic-link bearer token carrying the `mj_scopes` for this form. Sent as
|
|
16
|
+
* `Authorization: Bearer <token>`. Optional only so the widget can render a preview
|
|
17
|
+
* with no live submit; submission requires it.
|
|
18
|
+
*/
|
|
19
|
+
token?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Absolute URL of the multipart file-upload endpoint (`POST /forms/upload`). Optional:
|
|
22
|
+
* when omitted it is derived from {@link graphqlUrl} by {@link deriveUploadUrl}, so a
|
|
23
|
+
* host that only supplies `api-url` still gets working uploads. Sent the same anonymous
|
|
24
|
+
* bearer {@link token}.
|
|
25
|
+
*/
|
|
26
|
+
uploadUrl?: string;
|
|
27
|
+
/**
|
|
28
|
+
* PUBLIC Cloudflare Turnstile site key (DG-4). Global — one Cloudflare widget across
|
|
29
|
+
* all forms, NOT per-form — and safe to expose client-side. Only used when a form's
|
|
30
|
+
* `settings.captchaRequired` is on: the widget renders a challenge against this key and
|
|
31
|
+
* sends the resulting token as `turnstileToken`. When captcha-required forms are served
|
|
32
|
+
* with no site key, the widget shows a config-gap message instead of failing silently.
|
|
33
|
+
* Comes from the `<mj-form>` `turnstile-site-key` attribute.
|
|
34
|
+
*/
|
|
35
|
+
turnstileSiteKey?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Optional override for the Cloudflare Turnstile script URL. Defaults to
|
|
38
|
+
* {@link DEFAULT_TURNSTILE_SCRIPT_URL}; overridable only for tests/self-hosting.
|
|
39
|
+
*/
|
|
40
|
+
turnstileScriptUrl: string;
|
|
41
|
+
}
|
|
42
|
+
/** Build a {@link FormsApiConfig}, filling in derived defaults (script URL). */
|
|
43
|
+
export declare function normalizeApiConfig(partial: Omit<FormsApiConfig, 'turnstileScriptUrl'> & {
|
|
44
|
+
turnstileScriptUrl?: string;
|
|
45
|
+
}): FormsApiConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Derive the file-upload endpoint from the GraphQL endpoint. MJAPI serves the widget's
|
|
48
|
+
* anonymous upload route at `/forms/upload` on the same origin as `/graphql`, so we swap
|
|
49
|
+
* the trailing `/graphql` path segment for `/forms/upload`. Falls back to appending the
|
|
50
|
+
* path when the URL does not end in `/graphql`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function deriveUploadUrl(graphqlUrl: string): string;
|
|
53
|
+
/** DI token carrying the {@link FormsApiConfig} into the GraphQL transport. */
|
|
54
|
+
export declare const FORMS_API_CONFIG: InjectionToken<FormsApiConfig>;
|
|
55
|
+
//# sourceMappingURL=forms-api.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-api.config.d.ts","sourceRoot":"","sources":["../../../../src/lib/widget/api/forms-api.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,GAAG;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GACpF,cAAc,CAKhB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,gCAAyD,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection config for the real GraphQL transport.
|
|
3
|
+
*
|
|
4
|
+
* The widget is an embeddable, anonymous custom element: it talks to the MJAPI
|
|
5
|
+
* GraphQL endpoint directly over `fetch`, authenticated by an anonymous magic-link
|
|
6
|
+
* bearer token (the per-form public-link token), NOT by an Explorer session. These
|
|
7
|
+
* two values come from the `<mj-form>` element attributes (`api-url`, `token`).
|
|
8
|
+
*/
|
|
9
|
+
import { InjectionToken } from '@angular/core';
|
|
10
|
+
import { DEFAULT_TURNSTILE_SCRIPT_URL } from '../core/turnstile-loader';
|
|
11
|
+
/** Build a {@link FormsApiConfig}, filling in derived defaults (script URL). */
|
|
12
|
+
export function normalizeApiConfig(partial) {
|
|
13
|
+
return {
|
|
14
|
+
...partial,
|
|
15
|
+
turnstileScriptUrl: partial.turnstileScriptUrl?.trim() || DEFAULT_TURNSTILE_SCRIPT_URL,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Derive the file-upload endpoint from the GraphQL endpoint. MJAPI serves the widget's
|
|
20
|
+
* anonymous upload route at `/forms/upload` on the same origin as `/graphql`, so we swap
|
|
21
|
+
* the trailing `/graphql` path segment for `/forms/upload`. Falls back to appending the
|
|
22
|
+
* path when the URL does not end in `/graphql`.
|
|
23
|
+
*/
|
|
24
|
+
export function deriveUploadUrl(graphqlUrl) {
|
|
25
|
+
if (!graphqlUrl) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const url = new URL(graphqlUrl);
|
|
30
|
+
url.pathname = url.pathname.replace(/\/graphql\/?$/i, '') + '/forms/upload';
|
|
31
|
+
return url.toString();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Not an absolute URL — fall back to a plain string swap.
|
|
35
|
+
return graphqlUrl.replace(/\/graphql\/?$/i, '') + '/forms/upload';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** DI token carrying the {@link FormsApiConfig} into the GraphQL transport. */
|
|
39
|
+
export const FORMS_API_CONFIG = new InjectionToken('FORMS_API_CONFIG');
|
|
40
|
+
//# sourceMappingURL=forms-api.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-api.config.js","sourceRoot":"","sources":["../../../../src/lib/widget/api/forms-api.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAmCxE,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAChC,OAAqF;IAErF,OAAO;QACL,GAAG,OAAO;QACV,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,4BAA4B;KACvF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC;QAC5E,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;QAC1D,OAAO,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC;IACpE,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PublishedFormDefinition, FormSubmissionInput, FormSubmissionResult } from '@mj-biz-apps/forms-entities';
|
|
2
|
+
import type { IFormsApiService } from './forms-api.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class FormsGraphQLApiService implements IFormsApiService {
|
|
5
|
+
private readonly config;
|
|
6
|
+
/**
|
|
7
|
+
* Per-widget-instance anonymous session correlator, sent as the `x-session-id` header MJ
|
|
8
|
+
* core reads into `UserPayload.sessionId` (and thence `FormResponse.AnonymousSessionID`).
|
|
9
|
+
* Best-effort telemetry ONLY — correctness (dedupe/upsert) rides the stable client
|
|
10
|
+
* response id in the payload, never this header — so a stripped header degrades gracefully.
|
|
11
|
+
*/
|
|
12
|
+
private readonly sessionId;
|
|
13
|
+
loadPublishedForm(distributionSlug: string): Promise<PublishedFormDefinition | null>;
|
|
14
|
+
submitResponse(input: FormSubmissionInput, existingResponseId?: string): Promise<FormSubmissionResult>;
|
|
15
|
+
/** POST a GraphQL operation and unwrap its `data`, throwing on transport/GraphQL errors. */
|
|
16
|
+
private execute;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FormsGraphQLApiService, never>;
|
|
18
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<FormsGraphQLApiService>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=forms-api.graphql.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-api.graphql.service.d.ts","sourceRoot":"","sources":["../../../../src/lib/widget/api/forms-api.graphql.service.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;;AAmD9D,qBACa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IAEnD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAE3C,iBAAiB,CAC5B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAY7B,cAAc,CACzB,KAAK,EAAE,mBAAmB,EAC1B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAOhC,4FAA4F;YAC9E,OAAO;yCApCV,sBAAsB;6CAAtB,sBAAsB;CAkElC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real S1 transport — issues the `PublishedForm` / `SubmitFormResponse` GraphQL
|
|
3
|
+
* operations against the MJAPI endpoint over `fetch`.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately uses plain `fetch` rather than `@memberjunction/graphql-dataprovider`:
|
|
6
|
+
* the widget is a tiny, anonymous, embeddable custom element with no Explorer shell
|
|
7
|
+
* and no global MJ provider to lean on — it only needs an endpoint URL and an
|
|
8
|
+
* anonymous bearer token (both supplied as element attributes). This also keeps the
|
|
9
|
+
* transport strongly typed end-to-end instead of routing through `ExecuteGQL`'s
|
|
10
|
+
* untyped result.
|
|
11
|
+
*/
|
|
12
|
+
import { Injectable, inject } from '@angular/core';
|
|
13
|
+
import { FORMS_API_CONFIG } from './forms-api.config';
|
|
14
|
+
import { generateClientResponseId } from '../core/client-id';
|
|
15
|
+
import { toInputType } from './submission-mapping';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
const PUBLISHED_FORM_QUERY = `
|
|
18
|
+
query PublishedForm($distributionSlug: String!) {
|
|
19
|
+
PublishedForm(distributionSlug: $distributionSlug) {
|
|
20
|
+
definitionJSON
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
const SUBMIT_RESPONSE_MUTATION = `
|
|
25
|
+
mutation SubmitFormResponse($input: FormSubmissionInputType!) {
|
|
26
|
+
SubmitFormResponse(input: $input) {
|
|
27
|
+
success
|
|
28
|
+
responseId
|
|
29
|
+
status
|
|
30
|
+
confirmationMessage
|
|
31
|
+
redirectUrl
|
|
32
|
+
errors { questionId message }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
export class FormsGraphQLApiService {
|
|
37
|
+
config = inject(FORMS_API_CONFIG);
|
|
38
|
+
/**
|
|
39
|
+
* Per-widget-instance anonymous session correlator, sent as the `x-session-id` header MJ
|
|
40
|
+
* core reads into `UserPayload.sessionId` (and thence `FormResponse.AnonymousSessionID`).
|
|
41
|
+
* Best-effort telemetry ONLY — correctness (dedupe/upsert) rides the stable client
|
|
42
|
+
* response id in the payload, never this header — so a stripped header degrades gracefully.
|
|
43
|
+
*/
|
|
44
|
+
sessionId = generateClientResponseId();
|
|
45
|
+
async loadPublishedForm(distributionSlug) {
|
|
46
|
+
const data = await this.execute(PUBLISHED_FORM_QUERY, {
|
|
47
|
+
distributionSlug,
|
|
48
|
+
});
|
|
49
|
+
if (!data.PublishedForm) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// The full nested pages/questions/options graph is delivered as a JSON string in
|
|
53
|
+
// `definitionJSON`; parse it into the contract's PublishedFormDefinition.
|
|
54
|
+
return JSON.parse(data.PublishedForm.definitionJSON);
|
|
55
|
+
}
|
|
56
|
+
async submitResponse(input, existingResponseId) {
|
|
57
|
+
const data = await this.execute(SUBMIT_RESPONSE_MUTATION, {
|
|
58
|
+
input: toInputType(input, existingResponseId),
|
|
59
|
+
});
|
|
60
|
+
return data.SubmitFormResponse;
|
|
61
|
+
}
|
|
62
|
+
/** POST a GraphQL operation and unwrap its `data`, throwing on transport/GraphQL errors. */
|
|
63
|
+
async execute(query, variables) {
|
|
64
|
+
const headers = {
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
// Anonymous session correlator (see this.sessionId). Best-effort — captured server-side
|
|
67
|
+
// into AnonymousSessionID when present; never the idempotency key.
|
|
68
|
+
'x-session-id': this.sessionId,
|
|
69
|
+
};
|
|
70
|
+
if (this.config.token) {
|
|
71
|
+
headers['Authorization'] = `Bearer ${this.config.token}`;
|
|
72
|
+
}
|
|
73
|
+
const response = await fetch(this.config.graphqlUrl, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers,
|
|
76
|
+
body: JSON.stringify({ query, variables }),
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error(`Forms API request failed: HTTP ${response.status}`);
|
|
80
|
+
}
|
|
81
|
+
const envelope = (await response.json());
|
|
82
|
+
if (envelope.errors && envelope.errors.length > 0) {
|
|
83
|
+
throw new Error(envelope.errors.map((e) => e.message).join('; '));
|
|
84
|
+
}
|
|
85
|
+
if (!envelope.data) {
|
|
86
|
+
throw new Error('Forms API returned no data');
|
|
87
|
+
}
|
|
88
|
+
return envelope.data;
|
|
89
|
+
}
|
|
90
|
+
static ɵfac = function FormsGraphQLApiService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormsGraphQLApiService)(); };
|
|
91
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormsGraphQLApiService, factory: FormsGraphQLApiService.ɵfac });
|
|
92
|
+
}
|
|
93
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormsGraphQLApiService, [{
|
|
94
|
+
type: Injectable
|
|
95
|
+
}], null, null); })();
|
|
96
|
+
//# sourceMappingURL=forms-api.graphql.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-api.graphql.service.js","sourceRoot":"","sources":["../../../../src/lib/widget/api/forms-api.graphql.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;;AA2BnD,MAAM,oBAAoB,GAAG;;;;;;CAM5B,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;;;;;;;;CAWhC,CAAC;AAGF,MAAM,OAAO,sBAAsB;IAChB,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEnD;;;;;OAKG;IACc,SAAS,GAAG,wBAAwB,EAAE,CAAC;IAEjD,KAAK,CAAC,iBAAiB,CAC5B,gBAAwB;QAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAyB,oBAAoB,EAAE;YAC5E,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,iFAAiF;QACjF,0EAA0E;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAA4B,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,KAA0B,EAC1B,kBAA2B;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAyB,wBAAwB,EAAE;YAChF,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,4FAA4F;IACpF,KAAK,CAAC,OAAO,CACnB,KAAa,EACb,SAAkC;QAElC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,wFAAwF;YACxF,mEAAmE;YACnE,cAAc,EAAE,IAAI,CAAC,SAAS;SAC/B,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2B,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;gHAjEU,sBAAsB;gEAAtB,sBAAsB,WAAtB,sBAAsB;;iFAAtB,sBAAsB;cADlC,UAAU"}
|