@valtimo/form-view-model 12.7.0 → 12.8.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.
@@ -13,8 +13,8 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Injectable } from '@angular/core';
17
16
  import { HttpHeaders } from '@angular/common/http';
17
+ import { Injectable } from '@angular/core';
18
18
  import { BaseApiService } from '@valtimo/config';
19
19
  import { InterceptorSkip } from '@valtimo/security';
20
20
  import * as i0 from "@angular/core";
@@ -56,33 +56,36 @@ export class ViewModelService extends BaseApiService {
56
56
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
57
57
  });
58
58
  }
59
- getViewModelForStartForm(formName, processDefinitionKey) {
59
+ getViewModelForStartForm(formName, processDefinitionKey, documentId = null) {
60
60
  return this.httpClient.get(this.getApiUrl('/v1/form/view-model/start-form'), {
61
61
  params: {
62
62
  formName,
63
63
  processDefinitionKey,
64
+ ...(!!documentId && { documentId }),
64
65
  },
65
66
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
66
67
  });
67
68
  }
68
- updateViewModelForStartForm(formName, processDefinitionKey, viewModel, page, isWizard) {
69
+ updateViewModelForStartForm(formName, processDefinitionKey, documentId, viewModel, page, isWizard) {
69
70
  const params = {
70
71
  formName,
71
72
  processDefinitionKey,
72
73
  isWizard,
73
74
  ...(!isNaN(page) && { page }),
75
+ ...(!!documentId && { documentId }),
74
76
  };
75
77
  return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {
76
78
  params,
77
79
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
78
80
  });
79
81
  }
80
- submitViewModelForStartForm(formName, processDefinitionKey, documentDefinitionName, viewModel) {
82
+ submitViewModelForStartForm(formName, processDefinitionKey, documentId, documentDefinitionName, viewModel) {
81
83
  return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/submit/start-form`), viewModel, {
82
84
  params: {
83
85
  formName,
84
86
  processDefinitionKey,
85
87
  documentDefinitionName,
88
+ ...(!!documentId && { documentId }),
86
89
  },
87
90
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
88
91
  });
@@ -94,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
94
97
  type: Injectable,
95
98
  args: [{ providedIn: 'root' }]
96
99
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tb2RlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9mb3JtLXZpZXctbW9kZWwvc3JjL2xpYi9zZXJ2aWNlcy92aWV3LW1vZGVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxPQUFPLEVBQUMsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUdsRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNsRCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUdqRCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCLEVBQUUsY0FBc0I7UUFDMUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBTSxJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLEVBQUU7WUFDL0UsTUFBTSxFQUFFO2dCQUNOLFFBQVE7Z0JBQ1IsY0FBYzthQUNmO1lBQ0QsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsU0FBaUIsRUFDakIsSUFBWSxFQUNaLFFBQWlCO1FBRWpCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUTtZQUNSLGNBQWM7WUFDZCxRQUFRO1lBQ1IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLENBQUM7U0FDNUIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLFNBQVMsRUFBRTtZQUN0RixNQUFNO1lBQ04sT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsU0FBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQzdGLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLGNBQWM7YUFDZjtZQUNELE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx3QkFBd0IsQ0FDN0IsUUFBZ0IsRUFDaEIsb0JBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO1lBQ2hGLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLG9CQUFvQjthQUNyQjtZQUNELE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkIsQ0FDaEMsUUFBZ0IsRUFDaEIsb0JBQTRCLEVBQzVCLFNBQWlCLEVBQ2pCLElBQVksRUFDWixRQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVE7WUFDUixvQkFBb0I7WUFDcEIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDO1NBQzVCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxTQUFTLEVBQUU7WUFDdkYsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwyQkFBMkIsQ0FDaEMsUUFBZ0IsRUFDaEIsb0JBQTRCLEVBQzVCLHNCQUE4QixFQUM5QixTQUFpQjtRQUVqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLHVDQUF1QyxDQUFDLEVBQ3ZELFNBQVMsRUFDVDtZQUNFLE1BQU0sRUFBRTtnQkFDTixRQUFRO2dCQUNSLG9CQUFvQjtnQkFDcEIsc0JBQXNCO2FBQ3ZCO1lBQ0QsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FDRixDQUFDO0lBQ0osQ0FBQzsrR0FyR1UsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FESixNQUFNOzs0RkFDbEIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtCYXNlQXBpU2VydmljZSwgQ29uZmlnU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7SW50ZXJjZXB0b3JTa2lwfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFZpZXdNb2RlbFNlcnZpY2UgZXh0ZW5kcyBCYXNlQXBpU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsIGNvbmZpZ1NlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdNb2RlbChmb3JtTmFtZTogc3RyaW5nLCB0YXNrSW5zdGFuY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHRoaXMuZ2V0QXBpVXJsKCcvdjEvZm9ybS92aWV3LW1vZGVsL3VzZXItdGFzaycpLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgIHRhc2tJbnN0YW5jZUlkLFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWwoXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICB0YXNrSW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0LFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBpc1dpemFyZDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZvcm1OYW1lLFxuICAgICAgdGFza0luc3RhbmNlSWQsXG4gICAgICBpc1dpemFyZCxcbiAgICAgIC4uLighaXNOYU4ocGFnZSkgJiYge3BhZ2V9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC91c2VyLXRhc2tgKSwgdmlld01vZGVsLCB7XG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoSW50ZXJjZXB0b3JTa2lwLCAnNDAwJyksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0Vmlld01vZGVsKFxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXG4gICAgdGFza0luc3RhbmNlSWQ6IHN0cmluZyxcbiAgICB2aWV3TW9kZWw6IG9iamVjdFxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC9zdWJtaXQvdXNlci10YXNrYCksIHZpZXdNb2RlbCwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGZvcm1OYW1lLFxuICAgICAgICB0YXNrSW5zdGFuY2VJZCxcbiAgICAgIH0sXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoSW50ZXJjZXB0b3JTa2lwLCAnNDAwJyksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Vmlld01vZGVsRm9yU3RhcnRGb3JtKFxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXG4gICAgcHJvY2Vzc0RlZmluaXRpb25LZXk6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PGFueT4odGhpcy5nZXRBcGlVcmwoJy92MS9mb3JtL3ZpZXctbW9kZWwvc3RhcnQtZm9ybScpLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWxGb3JTdGFydEZvcm0oXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0LFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBpc1dpemFyZDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZvcm1OYW1lLFxuICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICBpc1dpemFyZCxcbiAgICAgIC4uLighaXNOYU4ocGFnZSkgJiYge3BhZ2V9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC9zdGFydC1mb3JtYCksIHZpZXdNb2RlbCwge1xuICAgICAgcGFyYW1zLFxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdFZpZXdNb2RlbEZvclN0YXJ0Rm9ybShcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxuICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmcsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0XG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoYC92MS9mb3JtL3ZpZXctbW9kZWwvc3VibWl0L3N0YXJ0LWZvcm1gKSxcbiAgICAgIHZpZXdNb2RlbCxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgICAgcHJvY2Vzc0RlZmluaXRpb25LZXksXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tb2RlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9mb3JtLXZpZXctbW9kZWwvc3JjL2xpYi9zZXJ2aWNlcy92aWV3LW1vZGVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUlsRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNsRCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUdqRCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCLEVBQUUsY0FBc0I7UUFDMUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBTSxJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLEVBQUU7WUFDL0UsTUFBTSxFQUFFO2dCQUNOLFFBQVE7Z0JBQ1IsY0FBYzthQUNmO1lBQ0QsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUM7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsU0FBaUIsRUFDakIsSUFBWSxFQUNaLFFBQWlCO1FBRWpCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUTtZQUNSLGNB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b3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUFwaVNlcnZpY2UsIENvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0ludGVyY2VwdG9yU2tpcH0gZnJvbSAnQHZhbHRpbW8vc2VjdXJpdHknO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgVmlld01vZGVsU2VydmljZSBleHRlbmRzIEJhc2VBcGlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaHR0cENsaWVudCwgY29uZmlnU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Vmlld01vZGVsKGZvcm1OYW1lOiBzdHJpbmcsIHRhc2tJbnN0YW5jZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PGFueT4odGhpcy5nZXRBcGlVcmwoJy92MS9mb3JtL3ZpZXctbW9kZWwvdXNlci10YXNrJyksIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgdGFza0luc3RhbmNlSWQsXG4gICAgICB9LFxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdNb2RlbChcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxuICAgIHRhc2tJbnN0YW5jZUlkOiBzdHJpbmcsXG4gICAgdmlld01vZGVsOiBvYmplY3QsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGlzV2l6YXJkOiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZm9ybU5hbWUsXG4gICAgICB0YXNrSW5zdGFuY2VJZCxcbiAgICAgIGlzV2l6YXJkLFxuICAgICAgLi4uKCFpc05hTihwYWdlKSAmJiB7cGFnZX0pLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0QXBpVXJsKGAvdjEvZm9ybS92aWV3LW1vZGVsL3VzZXItdGFza2ApLCB2aWV3TW9kZWwsIHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRWaWV3TW9kZWwoXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICB0YXNrSW5zdGFuY2VJZDogc3RyaW5nLFxuICAgIHZpZXdNb2RlbDogb2JqZWN0XG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0QXBpVXJsKGAvdjEvZm9ybS92aWV3LW1vZGVsL3N1Ym1pdC91c2VyLXRhc2tgKSwgdmlld01vZGVsLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgIHRhc2tJbnN0YW5jZUlkLFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWaWV3TW9kZWxGb3JTdGFydEZvcm0oXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nLFxuICAgIGRvY3VtZW50SWQ6IHN0cmluZyA9IG51bGxcbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHRoaXMuZ2V0QXBpVXJsKCcvdjEvZm9ybS92aWV3LW1vZGVsL3N0YXJ0LWZvcm0nKSwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGZvcm1OYW1lLFxuICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbktleSxcbiAgICAgICAgLi4uKCEhZG9jdW1lbnRJZCAmJiB7ZG9jdW1lbnRJZH0pLFxuICAgICAgfSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3TW9kZWxGb3JTdGFydEZvcm0oXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nLFxuICAgIGRvY3VtZW50SWQ6IHN0cmluZyxcbiAgICB2aWV3TW9kZWw6IG9iamVjdCxcbiAgICBwYWdlOiBudW1iZXIsXG4gICAgaXNXaXphcmQ6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmb3JtTmFtZSxcbiAgICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5LFxuICAgICAgaXNXaXphcmQsXG4gICAgICAuLi4oIWlzTmFOKHBhZ2UpICYmIHtwYWdlfSksXG4gICAgICAuLi4oISFkb2N1bWVudElkICYmIHtkb2N1bWVudElkfSksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXRBcGlVcmwoYC92MS9mb3JtL3ZpZXctbW9kZWwvc3RhcnQtZm9ybWApLCB2aWV3TW9kZWwsIHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldChJbnRlcmNlcHRvclNraXAsICc0MDAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRWaWV3TW9kZWxGb3JTdGFydEZvcm0oXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nLFxuICAgIGRvY3VtZW50SWQ6IHN0cmluZyxcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgdmlld01vZGVsOiBvYmplY3RcbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXG4gICAgICB0aGlzLmdldEFwaVVybChgL3YxL2Zvcm0vdmlldy1tb2RlbC9zdWJtaXQvc3RhcnQtZm9ybWApLFxuICAgICAgdmlld01vZGVsLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbktleSxcbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgIC4uLighIWRvY3VtZW50SWQgJiYge2RvY3VtZW50SWR9KSxcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KEludGVyY2VwdG9yU2tpcCwgJzQwMCcpLFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,16 +1,17 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, Component, ViewChild, Input, Output, NgModule } from '@angular/core';
2
+ import { Injectable, EventEmitter, Output, Input, ViewChild, Component, NgModule } from '@angular/core';
3
3
  import moment from 'moment';
4
- import { BehaviorSubject, Subject, combineLatest, withLatestFrom, take, filter, debounceTime, switchMap, of, catchError, EMPTY, tap } from 'rxjs';
4
+ import { BehaviorSubject, Subject, combineLatest, filter, take, switchMap, tap } from 'rxjs';
5
5
  import * as i5 from '@formio/angular';
6
6
  import { FormioModule } from '@formio/angular';
7
7
  import { map, distinctUntilChanged } from 'rxjs/operators';
8
8
  import { deepmerge } from 'deepmerge-ts';
9
+ import * as i1 from '@angular/common/http';
10
+ import { HttpHeaders, HttpErrorResponse } from '@angular/common/http';
9
11
  import * as i4 from '@angular/common';
10
12
  import { CommonModule } from '@angular/common';
11
- import { isEqual } from 'lodash';
12
- import * as i1 from '@angular/common/http';
13
- import { HttpHeaders } from '@angular/common/http';
13
+ import * as i6 from 'carbon-components-angular';
14
+ import { LayerModule } from 'carbon-components-angular';
14
15
  import * as i2 from '@valtimo/config';
15
16
  import { BaseApiService, FORM_VIEW_MODEL_TOKEN } from '@valtimo/config';
16
17
  import { InterceptorSkip } from '@valtimo/security';
@@ -68,33 +69,36 @@ class ViewModelService extends BaseApiService {
68
69
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
69
70
  });
70
71
  }
71
- getViewModelForStartForm(formName, processDefinitionKey) {
72
+ getViewModelForStartForm(formName, processDefinitionKey, documentId = null) {
72
73
  return this.httpClient.get(this.getApiUrl('/v1/form/view-model/start-form'), {
73
74
  params: {
74
75
  formName,
75
76
  processDefinitionKey,
77
+ ...(!!documentId && { documentId }),
76
78
  },
77
79
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
78
80
  });
79
81
  }
80
- updateViewModelForStartForm(formName, processDefinitionKey, viewModel, page, isWizard) {
82
+ updateViewModelForStartForm(formName, processDefinitionKey, documentId, viewModel, page, isWizard) {
81
83
  const params = {
82
84
  formName,
83
85
  processDefinitionKey,
84
86
  isWizard,
85
87
  ...(!isNaN(page) && { page }),
88
+ ...(!!documentId && { documentId }),
86
89
  };
87
90
  return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/start-form`), viewModel, {
88
91
  params,
89
92
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
90
93
  });
91
94
  }
92
- submitViewModelForStartForm(formName, processDefinitionKey, documentDefinitionName, viewModel) {
95
+ submitViewModelForStartForm(formName, processDefinitionKey, documentId, documentDefinitionName, viewModel) {
93
96
  return this.httpClient.post(this.getApiUrl(`/v1/form/view-model/submit/start-form`), viewModel, {
94
97
  params: {
95
98
  formName,
96
99
  processDefinitionKey,
97
100
  documentDefinitionName,
101
+ ...(!!documentId && { documentId }),
98
102
  },
99
103
  headers: new HttpHeaders().set(InterceptorSkip, '400'),
100
104
  });
@@ -151,6 +155,8 @@ class FormViewModelComponent {
151
155
  const form = {
152
156
  loadInitialViewModel: () => instance.loadInitialViewModel(),
153
157
  updateViewModel: () => instance.updateViewModel(),
158
+ loadInitialStartFormViewModel: () => instance.loadInitialViewModelForStartForm(),
159
+ updateViewStartFormModel: () => instance.updateViewModelForStartForm(),
154
160
  ...formValue,
155
161
  };
156
162
  this.form$.next(form);
@@ -164,6 +170,9 @@ class FormViewModelComponent {
164
170
  set isStartForm(isStartFormValue) {
165
171
  this.isStartForm$.next(isStartFormValue);
166
172
  }
173
+ set documentId(documentId) {
174
+ this.documentId$.next(documentId);
175
+ }
167
176
  set processDefinitionKey(processDefinitionKeyValue) {
168
177
  this.processDefinitionKey$.next(processDefinitionKeyValue);
169
178
  }
@@ -175,14 +184,15 @@ class FormViewModelComponent {
175
184
  this.translateService = translateService;
176
185
  this.stateService = stateService;
177
186
  this.formSubmit = new EventEmitter();
178
- this.errors = [];
179
187
  this.refreshForm = new EventEmitter();
180
188
  this._preventNextPage = false;
181
189
  this._preventPreviousPage = false;
182
190
  this._isWizard = false;
191
+ this.pendingUpdateSubscription = null;
183
192
  this.submission$ = new BehaviorSubject({});
184
193
  this.form$ = new BehaviorSubject(undefined);
185
194
  this.formName$ = new BehaviorSubject(undefined);
195
+ this.formErrors$ = new BehaviorSubject([]);
186
196
  this.options$ = new BehaviorSubject(undefined);
187
197
  this.taskInstanceId$ = new BehaviorSubject(undefined);
188
198
  this.tokenSetInLocalStorage$ = new BehaviorSubject(false);
@@ -191,6 +201,7 @@ class FormViewModelComponent {
191
201
  this.focus$ = new BehaviorSubject(null);
192
202
  this.loading$ = new BehaviorSubject(true);
193
203
  this.isStartForm$ = new BehaviorSubject(false);
204
+ this.documentId$ = new BehaviorSubject(null);
194
205
  this.processDefinitionKey$ = new BehaviorSubject(undefined);
195
206
  this.documentDefinitionName$ = new BehaviorSubject(undefined);
196
207
  this.updateForm = new Subject();
@@ -201,13 +212,14 @@ class FormViewModelComponent {
201
212
  },
202
213
  });
203
214
  this.formioOptions$ = combineLatest([
204
- this.currentLanguage$,
205
215
  this.options$,
206
216
  this._overrideOptions$,
207
- ]).pipe(map(([language, options, overrideOptions]) => {
217
+ ]).pipe(map(([options, overrideOptions]) => {
218
+ return deepmerge(options, overrideOptions);
219
+ }));
220
+ this.renderOptions$ = combineLatest([this.currentLanguage$]).pipe(map(([language]) => {
208
221
  const formioTranslations = this.translateService.instant('formioTranslations');
209
- const defaultOptions = {
210
- ...options,
222
+ return {
211
223
  language,
212
224
  ...(typeof formioTranslations === 'object'
213
225
  ? {
@@ -218,7 +230,6 @@ class FormViewModelComponent {
218
230
  }
219
231
  : {}),
220
232
  };
221
- return deepmerge(defaultOptions, overrideOptions);
222
233
  }));
223
234
  }
224
235
  ngOnInit() {
@@ -229,20 +240,26 @@ class FormViewModelComponent {
229
240
  this.loadInitialViewModel();
230
241
  }
231
242
  this.focusSubscription = this.focus$
232
- .pipe(withLatestFrom(this.change$))
233
- .subscribe(data => {
234
- const dataAtFocus = !!data[1] && !!data[1].data ? JSON.parse(JSON.stringify(data[1].data)) : null;
235
- this.blur$
236
- .pipe(take(1))
237
- .pipe(withLatestFrom(this.change$))
238
- .subscribe(dataBlur => {
239
- const dataEqual = isEqual(dataAtFocus, dataBlur[1]?.data);
240
- if (!dataEqual) {
241
- this.updateForm.next(true);
242
- }
243
+ .pipe(filter(e => {
244
+ // We only want to handle blur events after entering an input
245
+ return !!e && e.target instanceof HTMLInputElement;
246
+ }))
247
+ .subscribe(() => {
248
+ this.pendingUpdateSubscription?.unsubscribe();
249
+ this.blurSubscription?.unsubscribe();
250
+ this.blurSubscription = this.blur$
251
+ .pipe(filter(e => {
252
+ // Filter out events where relatedTarget is not null.
253
+ // The relatedTarget will be null when no new input is focused.
254
+ return !e.relatedTarget;
255
+ }))
256
+ .subscribe(() => {
257
+ this.blurSubscription?.unsubscribe();
258
+ this.setWaitCursor(true);
259
+ this.updateForm.next(true);
243
260
  });
244
261
  });
245
- this.updateSubscription = this.updateForm.pipe(filter(it => it), debounceTime(500)).subscribe(() => {
262
+ this.updateSubscription = this.updateForm.subscribe(() => {
246
263
  if (this.isStartForm$.value) {
247
264
  this.updateViewModelForStartForm();
248
265
  }
@@ -252,64 +269,71 @@ class FormViewModelComponent {
252
269
  });
253
270
  }
254
271
  ngOnDestroy() {
255
- this.focusSubscription.unsubscribe();
256
- this.updateSubscription.unsubscribe();
272
+ this.blurSubscription?.unsubscribe();
273
+ this.focusSubscription?.unsubscribe();
274
+ this.updateSubscription?.unsubscribe();
275
+ this.pendingUpdateSubscription?.unsubscribe();
276
+ this.setWaitCursor(false);
257
277
  }
258
278
  beforeSubmitHook(instance) {
259
279
  return (submission, callback) => instance.beforeSubmit(submission, callback);
260
280
  }
261
281
  beforeSubmit(submission, callback) {
282
+ this.pendingUpdateSubscription?.unsubscribe();
283
+ this.setWaitCursor(false);
262
284
  combineLatest([
263
285
  this.formName$,
264
286
  this.taskInstanceId$,
265
287
  this.processDefinitionKey$,
266
288
  this.documentDefinitionName$,
267
289
  this.isStartForm$,
290
+ this.documentId$,
268
291
  ])
269
- .pipe(take(1), switchMap(([formName, taskInstanceId, processDefinitionKey, documentDefinitionName, isStartForm,]) => isStartForm
292
+ .pipe(take(1), switchMap(([formName, taskInstanceId, processDefinitionKey, documentDefinitionName, isStartForm, documentId,]) => isStartForm
270
293
  ? this.viewModelService
271
- .submitViewModelForStartForm(formName, processDefinitionKey, documentDefinitionName, submission.data)
272
- .pipe(take(1), switchMap(response => {
273
- callback(null, submission);
274
- return of(response);
275
- }), catchError(error => {
276
- this.handleFormError(error);
277
- callback({ message: ' ', component: null }, null);
278
- return EMPTY; // return an empty observable to complete the stream
279
- }))
294
+ .submitViewModelForStartForm(formName, processDefinitionKey, documentId, documentDefinitionName, submission.data)
280
295
  : this.viewModelService
281
- .submitViewModel(formName, taskInstanceId, submission.data)
282
- .pipe(take(1), switchMap(response => {
296
+ .submitViewModel(formName, taskInstanceId, submission.data)))
297
+ .subscribe({
298
+ next: _ => {
283
299
  callback(null, submission);
284
- return of(response);
285
- }), catchError(error => {
286
- this.handleFormError(error);
287
- callback({ message: ' ', component: null }, null);
288
- return EMPTY; // return an empty observable to complete the stream
289
- }))))
290
- .subscribe();
300
+ },
301
+ error: err => {
302
+ this.handleSubmissionError(err, callback);
303
+ }
304
+ });
305
+ }
306
+ handleSubmissionError(error, callback) {
307
+ callback({ message: '', component: null, silent: true }, null);
308
+ if (error instanceof HttpErrorResponse) {
309
+ this.handleFormError(error);
310
+ }
291
311
  }
292
312
  handleFormError(error) {
293
313
  const formInstance = this.formio.formio;
294
- this.errors = [];
295
- if (error.error.componentErrors) {
314
+ this.formErrors$.next([]);
315
+ if (error.error?.componentErrors) {
316
+ const errors = [];
296
317
  error.error.componentErrors.forEach(componentError => {
297
318
  const component = formInstance.getComponent(componentError.component);
298
319
  if (component == null) {
299
- this.errors.push(componentError.message);
320
+ errors.push(componentError.message);
300
321
  }
301
322
  else {
302
- component?.setCustomValidity(componentError.message);
323
+ // `true` makes the error dirty, setting the css class properly
324
+ component.setCustomValidity(componentError.message, true);
303
325
  }
304
326
  });
327
+ this.formErrors$.next(errors);
305
328
  }
306
- else {
329
+ else if (error.error?.error) {
307
330
  const component = formInstance.getComponent(error.error?.component);
308
331
  if (component == null) {
309
- this.errors.push(error.error.error);
332
+ this.formErrors$.next([error.error.error]);
310
333
  }
311
334
  else {
312
- component?.setCustomValidity(error.error.error);
335
+ // `true` makes the error dirty, setting the css class properly
336
+ component.setCustomValidity(error.error.error, true);
313
337
  }
314
338
  }
315
339
  }
@@ -358,36 +382,11 @@ class FormViewModelComponent {
358
382
  }))))
359
383
  .subscribe();
360
384
  }
361
- updateViewModel() {
362
- this.loading$
363
- .pipe(take(1), switchMap(updating => {
364
- if (!updating) {
365
- this.loading$.next(true);
366
- return combineLatest([this.formName$, this.taskInstanceId$, this.change$]).pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
367
- .updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
368
- .pipe(tap({
369
- next: viewModel => {
370
- const submission = this.submission$.value;
371
- submission.data = viewModel;
372
- this.submission$.next(submission);
373
- this.handlePageChange();
374
- this.refreshForm.emit({ submission: submission });
375
- this.loading$.next(false);
376
- this.errors = [];
377
- },
378
- error: error => {
379
- this.loading$.next(false);
380
- this.handleFormError(error);
381
- },
382
- }))));
383
- }
384
- return of(null); // Fallback to return an observable if updating is true
385
- }))
386
- .subscribe();
387
- }
388
385
  loadInitialViewModelForStartForm() {
389
- combineLatest([this.formName$, this.processDefinitionKey$])
390
- .pipe(take(1), switchMap(([formName, processDefinitionKey]) => this.viewModelService.getViewModelForStartForm(formName, processDefinitionKey).pipe(tap(viewModel => {
386
+ combineLatest([this.formName$, this.processDefinitionKey$, this.documentId$])
387
+ .pipe(take(1), switchMap(([formName, processDefinitionKey, documentId]) => this.viewModelService
388
+ .getViewModelForStartForm(formName, processDefinitionKey, documentId)
389
+ .pipe(tap(viewModel => {
391
390
  this.submission$.next({ data: viewModel });
392
391
  this.change$.pipe(take(1)).subscribe(() => {
393
392
  this.loading$.next(false);
@@ -396,39 +395,63 @@ class FormViewModelComponent {
396
395
  }))))
397
396
  .subscribe();
398
397
  }
398
+ updateViewModel() {
399
+ this.pendingUpdateSubscription?.unsubscribe();
400
+ this.pendingUpdateSubscription = combineLatest([
401
+ this.formName$,
402
+ this.taskInstanceId$,
403
+ this.change$,
404
+ ])
405
+ .pipe(take(1), switchMap(([formName, taskInstanceId, change]) => this.viewModelService
406
+ .updateViewModel(formName, taskInstanceId, change.data, this.formio.formio.page, this._isWizard)
407
+ .pipe(tap({
408
+ next: viewModel => this.handleViewModelUpdate(viewModel),
409
+ error: error => this.handleViewModelUpdateError(error),
410
+ }))))
411
+ .subscribe();
412
+ }
399
413
  updateViewModelForStartForm() {
400
- this.loading$
401
- .pipe(take(1), switchMap(updating => {
402
- if (!updating) {
403
- this.loading$.next(true);
404
- return combineLatest([this.formName$, this.processDefinitionKey$, this.change$]).pipe(take(1), switchMap(([formName, processDefinitionKey, change]) => this.viewModelService
405
- .updateViewModelForStartForm(formName, processDefinitionKey, change.data, this.formio.formio.page, this._isWizard)
406
- .pipe(tap({
407
- next: viewModel => {
408
- const submission = this.submission$.value;
409
- submission.data = viewModel;
410
- this.submission$.next(submission);
411
- this.handlePageChange();
412
- this.refreshForm.emit({ submission: submission });
413
- this.loading$.next(false);
414
- this.errors = [];
415
- },
416
- error: error => {
417
- this.loading$.next(false);
418
- this.handleFormError(error);
419
- },
420
- }))));
421
- }
422
- return of(null); // Fallback to return an observable if updating is true
423
- }))
414
+ this.pendingUpdateSubscription?.unsubscribe();
415
+ this.pendingUpdateSubscription = combineLatest([
416
+ this.formName$,
417
+ this.processDefinitionKey$,
418
+ this.change$,
419
+ this.documentId$,
420
+ ])
421
+ .pipe(take(1), switchMap(([formName, processDefinitionKey, change, documentId]) => this.viewModelService
422
+ .updateViewModelForStartForm(formName, processDefinitionKey, documentId, change.data, this.formio.formio.page, this._isWizard)
423
+ .pipe(tap({
424
+ next: viewModel => this.handleViewModelUpdate(viewModel),
425
+ error: error => this.handleViewModelUpdateError(error),
426
+ }))))
424
427
  .subscribe();
425
428
  }
429
+ handleViewModelUpdate(viewModel) {
430
+ const submission = this.submission$.value;
431
+ submission.data = viewModel;
432
+ this.submission$.next(submission);
433
+ this.handlePageChange();
434
+ this.refreshForm.emit({ submission });
435
+ this.pendingUpdateSubscription?.unsubscribe();
436
+ this.pendingUpdateSubscription = null;
437
+ this.formErrors$.next([]);
438
+ this.setWaitCursor(false);
439
+ }
440
+ handleViewModelUpdateError(error) {
441
+ this.pendingUpdateSubscription?.unsubscribe();
442
+ this.pendingUpdateSubscription = null;
443
+ this.handleFormError(error);
444
+ this.setWaitCursor(false);
445
+ }
446
+ setWaitCursor(enabled) {
447
+ document.body.style.cursor = enabled ? 'wait' : 'auto';
448
+ }
426
449
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, deps: [{ token: ViewModelService }, { token: i2$1.TranslateService }, { token: i3.FormIoStateService }], target: i0.ɵɵFactoryTarget.Component }); }
427
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormViewModelComponent, isStandalone: true, selector: "valtimo-form-view-model", inputs: { options: "options", submission: "submission", form: "form", formName: "formName", taskInstanceId: "taskInstanceId", isStartForm: "isStartForm", processDefinitionKey: "processDefinitionKey", documentDefinitionName: "documentDefinitionName" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "formio", first: true, predicate: ["formio"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormioModule }, { kind: "component", type: i5.FormioComponent, selector: "formio" }] }); }
450
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormViewModelComponent, isStandalone: true, selector: "valtimo-form-view-model", inputs: { options: "options", submission: "submission", form: "form", formName: "formName", taskInstanceId: "taskInstanceId", isStartForm: "isStartForm", documentId: "documentId", processDefinitionKey: "processDefinitionKey", documentDefinitionName: "documentDefinitionName" }, outputs: { formSubmit: "formSubmit" }, viewQueries: [{ propertyName: "formio", first: true, predicate: ["formio"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"form-container formio-carbon\"\n cdsLayer=\"1.0\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n errors: formErrors$ | async,\n renderOptions: renderOptions$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [renderOptions]=\"obs.renderOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormioModule }, { kind: "component", type: i5.FormioComponent, selector: "formio" }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i6.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }] }); }
428
451
  }
429
452
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormViewModelComponent, decorators: [{
430
453
  type: Component,
431
- args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"form-container formio-carbon\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"] }]
454
+ args: [{ selector: 'valtimo-form-view-model', standalone: true, imports: [CommonModule, FormioModule, LayerModule], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"form-container formio-carbon\"\n cdsLayer=\"1.0\"\n *ngIf=\"{\n submission: submission$ | async,\n form: form$ | async,\n tokenSetInLocalStorage: tokenSetInLocalStorage$ | async,\n formioOptions: formioOptions$ | async,\n loading: loading$ | async,\n errors: formErrors$ | async,\n renderOptions: renderOptions$ | async,\n } as obs\"\n>\n <div *ngIf=\"obs.loading\" class=\"overlay\">\n <div class=\"spinner\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n </div>\n\n <div *ngIf=\"obs.errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of obs.errors\" class=\"pl-2\">\n {{ error }}\n </li>\n </ol>\n </div>\n\n <formio\n #formio\n [submission]=\"obs.submission\"\n [form]=\"obs.form\"\n [options]=\"obs.formioOptions\"\n [renderOptions]=\"obs.renderOptions\"\n [refresh]=\"refreshForm\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (focusin)=\"onFocus($event)\"\n (focusout)=\"onBlur($event)\"\n (nextPage)=\"onNextPage()\"\n (prevPage)=\"onPreviousPage()\"\n ></formio>\n</div>\n", styles: [".form-container{position:relative}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fffc;z-index:1000;display:flex;justify-content:center;align-items:center;pointer-events:all}.spinner{font-size:3rem;color:#007bff}\n"] }]
432
455
  }], ctorParameters: () => [{ type: ViewModelService }, { type: i2$1.TranslateService }, { type: i3.FormIoStateService }], propDecorators: { formio: [{
433
456
  type: ViewChild,
434
457
  args: ['formio']
@@ -444,6 +467,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
444
467
  type: Input
445
468
  }], isStartForm: [{
446
469
  type: Input
470
+ }], documentId: [{
471
+ type: Input
447
472
  }], processDefinitionKey: [{
448
473
  type: Input
449
474
  }], documentDefinitionName: [{