@sprucelabs/spruce-form-utils 18.1.3 → 18.1.4

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.
@@ -7,6 +7,8 @@ export * from './viewControllers/FormCard.vc';
7
7
  export { default as SpyFormCardViewController } from './__tests__/support/SpyFormCard';
8
8
  export { default as formCardAssert } from './__tests__/implementation/FormCard/formCardAssert';
9
9
  export * from './types/types-module';
10
+ export { default as RemoteFormCardViewController } from './viewControllers/RemoteFormCard.vc';
11
+ export * from './viewControllers/RemoteFormCard.vc';
10
12
  declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.types' {
11
13
  interface ViewControllerMap {
12
14
  'forms.card': FormCardViewController;
@@ -6,3 +6,5 @@ export * from './viewControllers/FormCard.vc.js';
6
6
  export { default as SpyFormCardViewController } from './__tests__/support/SpyFormCard.js';
7
7
  export { default as formCardAssert } from './__tests__/implementation/FormCard/formCardAssert.js';
8
8
  export * from './types/types-module.js';
9
+ export { default as RemoteFormCardViewController } from './viewControllers/RemoteFormCard.vc.js';
10
+ export * from './viewControllers/RemoteFormCard.vc.js';
@@ -0,0 +1,35 @@
1
+ import { AbstractViewController, ViewControllerOptions, Card, Router, SpruceSchemas, ViewController } from '@sprucelabs/heartwood-view-controllers';
2
+ import FormPlayerCardViewController from '../completing/FormPlayerCard.vc';
3
+ export default class RemoteFormCardViewController extends AbstractViewController<Card> {
4
+ static id: string;
5
+ protected playerVc: FormPlayerCardViewController;
6
+ private router;
7
+ private formId;
8
+ private organizationId;
9
+ private completedFormId?;
10
+ private saveDebounceTimeout?;
11
+ private onDoneHandler;
12
+ private onErrorHandler;
13
+ constructor(options: ViewControllerOptions & RemoteFormCardViewControllerOptions);
14
+ private FormPlayerCard;
15
+ load(options: RemoteFormCardLoadOptions): Promise<Pick<import("@sprucelabs/schema").SchemaStaticValues<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema, false, import("@sprucelabs/schema").SchemaOptionalFieldNames<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema>, import("@sprucelabs/schema").StaticSchemaAllValues<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema, false>>, "values" | "id" | "target" | "form" | "typeSlug" | "shouldRenderNav" | "roleToAddWhenCompleting" | "whereToSendOnCompletion" | "canEditCompletedForm" | "canCompleteMultipleTimes" | "roles" | "percentComplete"> | null>;
16
+ private loadForm;
17
+ protected handleSaveAndBeDone(): Promise<void>;
18
+ private handlePlayerChange;
19
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
20
+ }
21
+ export interface RemoteFormCardViewControllerOptions {
22
+ onDone: OnDoneHandler;
23
+ onError: OnErrorHandler;
24
+ }
25
+ type OnDoneHandler = () => void | Promise<void>;
26
+ type OnErrorHandler = (error: Error) => void | Promise<void>;
27
+ export interface RemoteFormCardLoadOptions {
28
+ router: Router;
29
+ formId: string;
30
+ organizationId: string;
31
+ }
32
+ export interface RemoteFormCard extends ViewController<Card> {
33
+ load(options: RemoteFormCardLoadOptions): Promise<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayload | null>;
34
+ }
35
+ export {};
@@ -0,0 +1,100 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { AbstractViewController, } from '@sprucelabs/heartwood-view-controllers';
11
+ class RemoteFormCardViewController extends AbstractViewController {
12
+ constructor(options) {
13
+ super(options);
14
+ const { onDone, onError } = options;
15
+ this.onDoneHandler = onDone;
16
+ this.onErrorHandler = onError;
17
+ this.playerVc = this.FormPlayerCard();
18
+ }
19
+ FormPlayerCard() {
20
+ return this.Controller('forms.form-player-card', {
21
+ onChange: this.handlePlayerChange.bind(this),
22
+ onSaveAndBeDone: this.handleSaveAndBeDone.bind(this),
23
+ });
24
+ }
25
+ load(options) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ const { router, formId, organizationId } = options;
28
+ this.router = router;
29
+ this.formId = formId;
30
+ this.organizationId = organizationId;
31
+ return yield this.loadForm();
32
+ });
33
+ }
34
+ loadForm() {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ try {
37
+ const client = yield this.connectToApi();
38
+ const [results] = yield client.emitAndFlattenResponses('forms.get-form::v2021_07_02', {
39
+ target: {
40
+ formId: this.formId,
41
+ organizationId: this.organizationId,
42
+ },
43
+ });
44
+ const { target, values, form } = results;
45
+ this.organizationId = target.organizationId;
46
+ yield this.playerVc.load(Object.assign(Object.assign({}, form), { values: values !== null && values !== void 0 ? values : [], router: this.router }));
47
+ return results;
48
+ }
49
+ catch (err) {
50
+ yield this.onErrorHandler(err);
51
+ }
52
+ return null;
53
+ });
54
+ }
55
+ handleSaveAndBeDone() {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ this.playerVc.setIsBusy(true);
58
+ if (this.completedFormId) {
59
+ const client = yield this.connectToApi();
60
+ yield client.emitAndFlattenResponses('forms.done::v2021_07_02', {
61
+ target: {
62
+ completedFormId: this.completedFormId,
63
+ organizationId: this.organizationId,
64
+ },
65
+ });
66
+ }
67
+ yield this.onDoneHandler();
68
+ });
69
+ }
70
+ handlePlayerChange() {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ clearTimeout(this.saveDebounceTimeout);
73
+ this.saveDebounceTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
74
+ var _a;
75
+ try {
76
+ const client = yield this.connectToApi();
77
+ const [{ completedFormId }] = yield client.emitAndFlattenResponses('forms.update-completed-form::v2021_07_02', {
78
+ payload: {
79
+ sourceFormId: this.formId,
80
+ values: this.playerVc.getValues(),
81
+ },
82
+ target: {
83
+ completedFormId: this.completedFormId,
84
+ organizationId: (_a = this.organizationId) !== null && _a !== void 0 ? _a : 'NO ORG',
85
+ },
86
+ });
87
+ this.completedFormId = completedFormId;
88
+ }
89
+ catch (err) {
90
+ this.log.error(err);
91
+ }
92
+ }), 100);
93
+ });
94
+ }
95
+ render() {
96
+ return this.playerVc.render();
97
+ }
98
+ }
99
+ RemoteFormCardViewController.id = 'remote-form-card';
100
+ export default RemoteFormCardViewController;
@@ -7,6 +7,8 @@ export * from './viewControllers/FormCard.vc';
7
7
  export { default as SpyFormCardViewController } from './__tests__/support/SpyFormCard';
8
8
  export { default as formCardAssert } from './__tests__/implementation/FormCard/formCardAssert';
9
9
  export * from './types/types-module';
10
+ export { default as RemoteFormCardViewController } from './viewControllers/RemoteFormCard.vc';
11
+ export * from './viewControllers/RemoteFormCard.vc';
10
12
  declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.types' {
11
13
  interface ViewControllerMap {
12
14
  'forms.card': FormCardViewController;
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.formCardAssert = exports.SpyFormCardViewController = exports.FormCardViewController = exports.FormPlayerCardViewController = exports.formCompletionCalculator = exports.formAssert = void 0;
20
+ exports.RemoteFormCardViewController = exports.formCardAssert = exports.SpyFormCardViewController = exports.FormCardViewController = exports.FormPlayerCardViewController = exports.formCompletionCalculator = exports.formAssert = void 0;
21
21
  var formAssert_1 = require("./__tests__/support/formAssert");
22
22
  Object.defineProperty(exports, "formAssert", { enumerable: true, get: function () { return __importDefault(formAssert_1).default; } });
23
23
  var formCompletionCalculator_1 = require("./completing/formCompletionCalculator");
@@ -32,3 +32,6 @@ Object.defineProperty(exports, "SpyFormCardViewController", { enumerable: true,
32
32
  var formCardAssert_1 = require("./__tests__/implementation/FormCard/formCardAssert");
33
33
  Object.defineProperty(exports, "formCardAssert", { enumerable: true, get: function () { return __importDefault(formCardAssert_1).default; } });
34
34
  __exportStar(require("./types/types-module"), exports);
35
+ var RemoteFormCard_vc_1 = require("./viewControllers/RemoteFormCard.vc");
36
+ Object.defineProperty(exports, "RemoteFormCardViewController", { enumerable: true, get: function () { return __importDefault(RemoteFormCard_vc_1).default; } });
37
+ __exportStar(require("./viewControllers/RemoteFormCard.vc"), exports);
@@ -0,0 +1,35 @@
1
+ import { AbstractViewController, ViewControllerOptions, Card, Router, SpruceSchemas, ViewController } from '@sprucelabs/heartwood-view-controllers';
2
+ import FormPlayerCardViewController from '../completing/FormPlayerCard.vc';
3
+ export default class RemoteFormCardViewController extends AbstractViewController<Card> {
4
+ static id: string;
5
+ protected playerVc: FormPlayerCardViewController;
6
+ private router;
7
+ private formId;
8
+ private organizationId;
9
+ private completedFormId?;
10
+ private saveDebounceTimeout?;
11
+ private onDoneHandler;
12
+ private onErrorHandler;
13
+ constructor(options: ViewControllerOptions & RemoteFormCardViewControllerOptions);
14
+ private FormPlayerCard;
15
+ load(options: RemoteFormCardLoadOptions): Promise<Pick<import("@sprucelabs/schema").SchemaStaticValues<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema, false, import("@sprucelabs/schema").SchemaOptionalFieldNames<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema>, import("@sprucelabs/schema").StaticSchemaAllValues<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayloadSchema, false>>, "values" | "id" | "target" | "form" | "typeSlug" | "shouldRenderNav" | "roleToAddWhenCompleting" | "whereToSendOnCompletion" | "canEditCompletedForm" | "canCompleteMultipleTimes" | "roles" | "percentComplete"> | null>;
16
+ private loadForm;
17
+ protected handleSaveAndBeDone(): Promise<void>;
18
+ private handlePlayerChange;
19
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
20
+ }
21
+ export interface RemoteFormCardViewControllerOptions {
22
+ onDone: OnDoneHandler;
23
+ onError: OnErrorHandler;
24
+ }
25
+ type OnDoneHandler = () => void | Promise<void>;
26
+ type OnErrorHandler = (error: Error) => void | Promise<void>;
27
+ export interface RemoteFormCardLoadOptions {
28
+ router: Router;
29
+ formId: string;
30
+ organizationId: string;
31
+ }
32
+ export interface RemoteFormCard extends ViewController<Card> {
33
+ load(options: RemoteFormCardLoadOptions): Promise<SpruceSchemas.Forms.v2021_07_02.GetFormResponsePayload | null>;
34
+ }
35
+ export {};
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
4
+ class RemoteFormCardViewController extends heartwood_view_controllers_1.AbstractViewController {
5
+ constructor(options) {
6
+ super(options);
7
+ const { onDone, onError } = options;
8
+ this.onDoneHandler = onDone;
9
+ this.onErrorHandler = onError;
10
+ this.playerVc = this.FormPlayerCard();
11
+ }
12
+ FormPlayerCard() {
13
+ return this.Controller('forms.form-player-card', {
14
+ onChange: this.handlePlayerChange.bind(this),
15
+ onSaveAndBeDone: this.handleSaveAndBeDone.bind(this),
16
+ });
17
+ }
18
+ async load(options) {
19
+ const { router, formId, organizationId } = options;
20
+ this.router = router;
21
+ this.formId = formId;
22
+ this.organizationId = organizationId;
23
+ return await this.loadForm();
24
+ }
25
+ async loadForm() {
26
+ try {
27
+ const client = await this.connectToApi();
28
+ const [results] = await client.emitAndFlattenResponses('forms.get-form::v2021_07_02', {
29
+ target: {
30
+ formId: this.formId,
31
+ organizationId: this.organizationId,
32
+ },
33
+ });
34
+ const { target, values, form } = results;
35
+ this.organizationId = target.organizationId;
36
+ await this.playerVc.load({
37
+ ...form,
38
+ values: values !== null && values !== void 0 ? values : [],
39
+ router: this.router,
40
+ });
41
+ return results;
42
+ }
43
+ catch (err) {
44
+ await this.onErrorHandler(err);
45
+ }
46
+ return null;
47
+ }
48
+ async handleSaveAndBeDone() {
49
+ this.playerVc.setIsBusy(true);
50
+ if (this.completedFormId) {
51
+ const client = await this.connectToApi();
52
+ await client.emitAndFlattenResponses('forms.done::v2021_07_02', {
53
+ target: {
54
+ completedFormId: this.completedFormId,
55
+ organizationId: this.organizationId,
56
+ },
57
+ });
58
+ }
59
+ await this.onDoneHandler();
60
+ }
61
+ async handlePlayerChange() {
62
+ clearTimeout(this.saveDebounceTimeout);
63
+ this.saveDebounceTimeout = setTimeout(async () => {
64
+ var _a;
65
+ try {
66
+ const client = await this.connectToApi();
67
+ const [{ completedFormId }] = await client.emitAndFlattenResponses('forms.update-completed-form::v2021_07_02', {
68
+ payload: {
69
+ sourceFormId: this.formId,
70
+ values: this.playerVc.getValues(),
71
+ },
72
+ target: {
73
+ completedFormId: this.completedFormId,
74
+ organizationId: (_a = this.organizationId) !== null && _a !== void 0 ? _a : 'NO ORG',
75
+ },
76
+ });
77
+ this.completedFormId = completedFormId;
78
+ }
79
+ catch (err) {
80
+ this.log.error(err);
81
+ }
82
+ }, 100);
83
+ }
84
+ render() {
85
+ return this.playerVc.render();
86
+ }
87
+ }
88
+ RemoteFormCardViewController.id = 'remote-form-card';
89
+ exports.default = RemoteFormCardViewController;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sprucelabs/spruce-form-utils",
3
3
  "description": "Support for working with forms and Sprucebot. 📄",
4
- "version": "18.1.3",
4
+ "version": "18.1.4",
5
5
  "skill": {
6
6
  "namespace": "forms"
7
7
  },
@@ -45,7 +45,11 @@
45
45
  "build/viewControllers/FormCard.vc.js",
46
46
  "build/viewControllers/FormCard.vc.d.ts",
47
47
  "build/esm/viewControllers/FormCard.vc.js",
48
- "build/esm/viewControllers/FormCard.vc.d.ts"
48
+ "build/esm/viewControllers/FormCard.vc.d.ts",
49
+ "build/viewControllers/RemoteFormCard.vc.js",
50
+ "build/viewControllers/RemoteFormCard.vc.d.ts",
51
+ "build/esm/viewControllers/RemoteFormCard.vc.js",
52
+ "build/esm/viewControllers/RemoteFormCard.vc.d.ts"
49
53
  ],
50
54
  "keywords": [],
51
55
  "scripts": {