@microsoft/generator-sharepoint 1.15.0-beta.1 → 1.15.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.
Files changed (65) hide show
  1. package/lib/common/BaseGenerator.js +5 -1
  2. package/lib/common/JsonManager.js +5 -1
  3. package/lib/common/ServeJsonManager.js +5 -1
  4. package/lib/common/YeomanConfiguration.d.ts +2 -0
  5. package/lib/common/YeomanConfiguration.d.ts.map +1 -1
  6. package/lib/common/YeomanConfiguration.js +8 -1
  7. package/lib/common/dependencies.json +82 -52
  8. package/lib/common/spsay.d.ts +1 -1
  9. package/lib/common/spsay.d.ts.map +1 -1
  10. package/lib/common/spsay.js +9 -9
  11. package/lib/common/utilities.d.ts.map +1 -1
  12. package/lib/common/utilities.js +10 -2
  13. package/lib/generators/adaptiveCardExtension/index.js +6 -2
  14. package/lib/generators/adaptiveCardExtension/templates/manifestTemplate/baseTemplate/{componentClassName}.manifest.json +3 -3
  15. package/lib/generators/adaptiveCardExtension/templates/manifestTemplate/imageTemplate/{componentClassName}.manifest.json +1 -2
  16. package/lib/generators/adaptiveCardExtension/templates/none/quickView/QuickView.ts +1 -1
  17. package/lib/generators/app/index.d.ts.map +1 -1
  18. package/lib/generators/app/index.js +9 -2
  19. package/lib/generators/applicationCustomizer/index.js +6 -2
  20. package/lib/generators/applicationCustomizer/templates/none/{componentClassName}.ts +3 -1
  21. package/lib/generators/commandSet/index.js +6 -2
  22. package/lib/generators/commandSet/templates/none/{componentClassName}.ts +7 -5
  23. package/lib/generators/component/BaseComponentGenerator.d.ts +3 -0
  24. package/lib/generators/component/BaseComponentGenerator.d.ts.map +1 -1
  25. package/lib/generators/component/BaseComponentGenerator.js +26 -1
  26. package/lib/generators/component/index.js +5 -1
  27. package/lib/generators/component/templates/eslint/default.eslintrc.js +5 -0
  28. package/lib/generators/component/templates/eslint/react.eslintrc.js +5 -0
  29. package/lib/generators/extension/BaseExtensionGenerator.d.ts +2 -1
  30. package/lib/generators/extension/BaseExtensionGenerator.d.ts.map +1 -1
  31. package/lib/generators/extension/BaseExtensionGenerator.js +13 -4
  32. package/lib/generators/extension/index.d.ts +2 -1
  33. package/lib/generators/extension/index.d.ts.map +1 -1
  34. package/lib/generators/extension/index.js +12 -2
  35. package/lib/generators/fieldCustomizer/index.js +6 -2
  36. package/lib/generators/fieldCustomizer/templates/minimal/{componentClassName}.module.scss +1 -1
  37. package/lib/generators/fieldCustomizer/templates/minimal/{componentClassName}.ts +1 -1
  38. package/lib/generators/fieldCustomizer/templates/none/{componentClassName}.module.scss +1 -1
  39. package/lib/generators/fieldCustomizer/templates/none/{componentClassName}.ts +1 -1
  40. package/lib/generators/fieldCustomizer/templates/react/components/{componentName}.module.scss +1 -1
  41. package/lib/generators/fieldCustomizer/templates/react/components/{componentName}.tsx +1 -1
  42. package/lib/generators/formCustomizer/index.d.ts +24 -0
  43. package/lib/generators/formCustomizer/index.d.ts.map +1 -0
  44. package/lib/generators/formCustomizer/index.js +142 -0
  45. package/lib/generators/formCustomizer/templates/base/{componentClassName}.manifest.json +17 -0
  46. package/lib/generators/formCustomizer/templates/loc/en-us.js +7 -0
  47. package/lib/generators/formCustomizer/templates/loc/myStrings.d.ts +10 -0
  48. package/lib/generators/formCustomizer/templates/none/{componentClassName}.module.scss +5 -0
  49. package/lib/generators/formCustomizer/templates/none/{componentClassName}.ts +53 -0
  50. package/lib/generators/formCustomizer/templates/react/components/{componentName}.module.scss +5 -0
  51. package/lib/generators/formCustomizer/templates/react/components/{componentName}.tsx +28 -0
  52. package/lib/generators/formCustomizer/templates/react/{componentClassName}.ts +64 -0
  53. package/lib/generators/library/index.js +6 -2
  54. package/lib/generators/searchQueryModifier/index.js +6 -2
  55. package/lib/generators/solution/index.js +6 -1
  56. package/lib/generators/solution/templates/base/.vscode/settings.json +13 -0
  57. package/lib/generators/solution/templates/spo/tsconfig.json +1 -1
  58. package/lib/generators/webpart/index.js +6 -2
  59. package/lib/generators/webpart/initial.teamsManifest.json +6 -0
  60. package/lib/generators/webpart/templates/none/{componentClassName}.ts +6 -3
  61. package/lib/generators/webpart/templates/react/components/{componentName}.tsx +8 -8
  62. package/lib/generators/webpart/templates/react/{componentClassName}.ts +6 -3
  63. package/package.json +4 -4
  64. package/lib/generators/solution/templates/gulp/tslint.json +0 -29
  65. package/lib/generators/solution/templates/heft/tslint.json +0 -7
@@ -7,8 +7,6 @@ import {
7
7
  } from '@microsoft/sp-listview-extensibility';
8
8
  import { Dialog } from '@microsoft/sp-dialog';
9
9
 
10
- import * as strings from '<%= componentStrings %>';
11
-
12
10
  /**
13
11
  * If your command set uses the ClientSideComponentProperties JSON input,
14
12
  * it will be deserialized into the BaseExtension.properties object.
@@ -39,10 +37,14 @@ export default class <%= componentClassName %> extends BaseListViewCommandSet<I<
39
37
  public onExecute(event: IListViewCommandSetExecuteEventParameters): void {
40
38
  switch (event.itemId) {
41
39
  case 'COMMAND_1':
42
- Dialog.alert(`${this.properties.sampleTextOne}`);
40
+ Dialog.alert(`${this.properties.sampleTextOne}`).catch(() => {
41
+ /* handle error */
42
+ });
43
43
  break;
44
44
  case 'COMMAND_2':
45
- Dialog.alert(`${this.properties.sampleTextTwo}`);
45
+ Dialog.alert(`${this.properties.sampleTextTwo}`).catch(() => {
46
+ /* handle error */
47
+ });
46
48
  break;
47
49
  default:
48
50
  throw new Error('Unknown command');
@@ -55,7 +57,7 @@ export default class <%= componentClassName %> extends BaseListViewCommandSet<I<
55
57
  const compareOneCommand: Command = this.tryGetCommand('COMMAND_1');
56
58
  if (compareOneCommand) {
57
59
  // This command should be hidden unless exactly one row is selected.
58
- compareOneCommand.visible = this.context.listView.selectedRows.length === 1;
60
+ compareOneCommand.visible = this.context.listView.selectedRows!.length === 1;
59
61
  }
60
62
 
61
63
  // TODO: Add your logic here
@@ -31,11 +31,14 @@ export declare abstract class BaseComponentGenerator<IOptions extends IBaseCompo
31
31
  /** The name of the folder that this comonent should have its template copied to */
32
32
  protected abstract readonly folderName: string;
33
33
  protected abstract readonly allowedTemplates: AvailableTemplates[];
34
+ private _shouldLogESLintWarning;
34
35
  prompting(): Promise<void>;
35
36
  configuring(bundleEntry?: IConfigBundle): void;
36
37
  writing(shouldWrite?: boolean): void;
37
38
  install(): void;
39
+ end(): void;
38
40
  protected _getOutputFolder(componentNameCamelCase: string): string;
41
+ protected _writeESLintConfig(): void;
39
42
  private checkSolution;
40
43
  }
41
44
  export interface INormalizedComponentNames {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseComponentGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/component/BaseComponentGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI7F,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB,EAAE,YAAY;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC5C,IAAI,EAAE,MAAM,GACX,IAAI,CAkBN;AAED,8BAAsB,sBAAsB,CAC1C,QAAQ,SAAS,qBAAqB,EACtC,QAAQ,SAAS,qBAAqB,CACtC,SAAQ,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACjD,0GAA0G;IAC1G,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7C,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IAEtD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAuFhC,WAAW,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI;IAqC9C,OAAO,CAAC,WAAW,GAAE,OAAc,GAAG,IAAI;IAU1C,OAAO,IAAI,IAAI;IAOtB,SAAS,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,GAAG,MAAM;YAIpD,aAAa;CAQ5B;AAED,MAAM,WAAW,yBAAyB;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B,EAAE,MAAM,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CACrC,sBAAsB,EAAE,MAAM,EAC9B,aAAa,EAAE,MAAM,GACpB,yBAAyB,CA0C3B"}
1
+ {"version":3,"file":"BaseComponentGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/component/BaseComponentGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI7F,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB,EAAE,YAAY;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC5C,IAAI,EAAE,MAAM,GACX,IAAI,CAkBN;AAED,8BAAsB,sBAAsB,CAC1C,QAAQ,SAAS,qBAAqB,EACtC,QAAQ,SAAS,qBAAqB,CACtC,SAAQ,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IACjD,0GAA0G;IAC1G,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7C,mFAAmF;IACnF,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IAEnE,OAAO,CAAC,uBAAuB,CAAkB;IAEpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAuFhC,WAAW,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI;IAqC9C,OAAO,CAAC,WAAW,GAAE,OAAc,GAAG,IAAI;IAa1C,OAAO,IAAI,IAAI;IAOf,GAAG,IAAI,IAAI;IAUlB,SAAS,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,GAAG,MAAM;IAIlE,SAAS,CAAC,kBAAkB,IAAI,IAAI;YAYtB,aAAa;CAQ5B;AAED,MAAM,WAAW,yBAAyB;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B,EAAE,MAAM,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CACrC,sBAAsB,EAAE,MAAM,EAC9B,aAAa,EAAE,MAAM,GACpB,yBAAyB,CA0C3B"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -51,6 +55,10 @@ function defineOptions(generator, type) {
51
55
  }
52
56
  exports.defineOptions = defineOptions;
53
57
  class BaseComponentGenerator extends BaseGenerator_1.BaseGenerator {
58
+ constructor() {
59
+ super(...arguments);
60
+ this._shouldLogESLintWarning = false;
61
+ }
54
62
  async prompting() {
55
63
  await this.checkSolution();
56
64
  const availableTemplates = [{ name: 'No framework', value: 'none' }];
@@ -151,6 +159,8 @@ class BaseComponentGenerator extends BaseGenerator_1.BaseGenerator {
151
159
  this.copyTemplate(path.join(this.sourceRoot(), this.context.template), dest);
152
160
  this.copyTemplate(path.join(this.sourceRoot(), 'base'), dest);
153
161
  }
162
+ // we need to write the eslint config anyway
163
+ this._writeESLintConfig();
154
164
  }
155
165
  install() {
156
166
  if (!this.tryInstall()) {
@@ -158,9 +168,24 @@ class BaseComponentGenerator extends BaseGenerator_1.BaseGenerator {
158
168
  this.log(`Skipping installation of dependencies. You should run "npm install"`);
159
169
  }
160
170
  }
171
+ end() {
172
+ if (this._shouldLogESLintWarning) {
173
+ this.log(colors_1.default.yellow(`Found an existing ".eslintrc.js" file. Consider updating it if you are adding React component to non-React solution.`));
174
+ }
175
+ }
161
176
  _getOutputFolder(componentNameCamelCase) {
162
177
  return path.join(this.destinationRoot(), 'src', this.folderName, componentNameCamelCase);
163
178
  }
179
+ _writeESLintConfig() {
180
+ const isReactTemplate = this.context.template === 'react';
181
+ const esLintPath = path.join(this.destinationRoot(), '.eslintrc.js');
182
+ if (node_core_library_1.FileSystem.exists(esLintPath)) {
183
+ this._shouldLogESLintWarning = isReactTemplate;
184
+ return;
185
+ }
186
+ const esLintConfigFilename = isReactTemplate ? 'react.eslintrc.js' : 'default.eslintrc.js';
187
+ this.fs.copy(`${__dirname}/templates/eslint/${esLintConfigFilename}`, esLintPath);
188
+ }
164
189
  async checkSolution() {
165
190
  if (this.config.get('creatingSolution')) {
166
191
  return;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -0,0 +1,5 @@
1
+ require('@rushstack/eslint-config/patch/modern-module-resolution');
2
+ module.exports = {
3
+ extends: ['@microsoft/eslint-config-spfx/lib/profiles/default'],
4
+ parserOptions: { tsconfigRootDir: __dirname }
5
+ };
@@ -0,0 +1,5 @@
1
+ require('@rushstack/eslint-config/patch/modern-module-resolution');
2
+ module.exports = {
3
+ extends: ['@microsoft/eslint-config-spfx/lib/profiles/react'],
4
+ parserOptions: { tsconfigRootDir: __dirname }
5
+ };
@@ -1,6 +1,6 @@
1
1
  import { BaseGenerator, IBaseOptions } from '../../common/BaseGenerator';
2
2
  import * as BaseComponent from '../component/BaseComponentGenerator';
3
- export declare type AvailableExtensions = 'ApplicationCustomizer' | 'CommandSet' | 'FieldCustomizer' | 'SearchQueryModifier';
3
+ export declare type AvailableExtensions = 'ApplicationCustomizer' | 'CommandSet' | 'FieldCustomizer' | 'SearchQueryModifier' | 'FormCustomizer';
4
4
  export interface IBaseExtensionOptions extends BaseComponent.IBaseComponentOptions {
5
5
  }
6
6
  export interface IBaseExtensionContext extends BaseComponent.IBaseComponentContext {
@@ -12,6 +12,7 @@ export declare abstract class BaseExtensionGenerator<IOptions extends IBaseExten
12
12
  writing(shouldCopy?: boolean): void;
13
13
  install(): void;
14
14
  protected abstract includeClientSideInstances(): boolean;
15
+ protected addFeature(): void;
15
16
  protected hasElementsXml(): boolean;
16
17
  private _getFeatureFrameworkDocsUrl;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseExtensionGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/extension/BaseExtensionGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,aAAa,MAAM,qCAAqC,CAAC;AAErE,oBAAY,mBAAmB,GAC3B,uBAAuB,GACvB,YAAY,GACZ,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AACrF,MAAM,WAAW,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AAErF,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC5C,IAAI,GAAE,MAAoB,GACzB,IAAI,CAEN;AAED,8BAAsB,sBAAsB,CAC1C,QAAQ,SAAS,qBAAqB,EACtC,QAAQ,SAAS,qBAAqB,CACtC,SAAQ,aAAa,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAgB;IAE9C,WAAW,IAAI,IAAI;IAQnB,OAAO,CAAC,UAAU,GAAE,OAAc,GAAG,IAAI;IAoBzC,OAAO,IAAI,IAAI;IAItB,SAAS,CAAC,QAAQ,CAAC,0BAA0B,IAAI,OAAO;IAExD,SAAS,CAAC,cAAc,IAAI,OAAO;IAKnC,OAAO,CAAC,2BAA2B;CAgBpC"}
1
+ {"version":3,"file":"BaseExtensionGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/extension/BaseExtensionGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,aAAa,MAAM,qCAAqC,CAAC;AAErE,oBAAY,mBAAmB,GAC3B,uBAAuB,GACvB,YAAY,GACZ,iBAAiB,GACjB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,WAAW,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AACrF,MAAM,WAAW,qBAAsB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AAErF,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC5C,IAAI,GAAE,MAAoB,GACzB,IAAI,CAEN;AAED,8BAAsB,sBAAsB,CAC1C,QAAQ,SAAS,qBAAqB,EACtC,QAAQ,SAAS,qBAAqB,CACtC,SAAQ,aAAa,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAgB;IAE9C,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,UAAU,GAAE,OAAc,GAAG,IAAI;IAoBzC,OAAO,IAAI,IAAI;IAItB,SAAS,CAAC,QAAQ,CAAC,0BAA0B,IAAI,OAAO;IAExD,SAAS,CAAC,UAAU,IAAI,IAAI;IAM5B,SAAS,CAAC,cAAc,IAAI,OAAO;IAKnC,OAAO,CAAC,2BAA2B;CAkBpC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -40,9 +44,7 @@ class BaseExtensionGenerator extends BaseComponent.BaseComponentGenerator {
40
44
  configuring() {
41
45
  super.configuring();
42
46
  this.ensureDependencyGroup('extension');
43
- if (!this.hasElementsXml()) {
44
- this.packageSolutionJson.addExtensionFeature(Utils.generateGuid(), this.includeClientSideInstances());
45
- }
47
+ this.addFeature();
46
48
  }
47
49
  writing(shouldCopy = true) {
48
50
  super.writing(shouldCopy);
@@ -62,6 +64,11 @@ class BaseExtensionGenerator extends BaseComponent.BaseComponentGenerator {
62
64
  install() {
63
65
  super.install();
64
66
  }
67
+ addFeature() {
68
+ if (!this.hasElementsXml()) {
69
+ this.packageSolutionJson.addExtensionFeature(Utils.generateGuid(), this.includeClientSideInstances());
70
+ }
71
+ }
65
72
  hasElementsXml() {
66
73
  const elementsXmlPath = path.join(this.destinationRoot(), 'sharepoint', 'assets', 'elements.xml');
67
74
  return node_core_library_1.FileSystem.exists(elementsXmlPath);
@@ -77,6 +84,8 @@ class BaseExtensionGenerator extends BaseComponent.BaseComponentGenerator {
77
84
  return 'https://aka.ms/spfx/extensions/tutorial/helloworld3';
78
85
  case 'SearchQueryModifier':
79
86
  return 'https://aka.ms/spfx/extensions/search';
87
+ case 'FormCustomizer':
88
+ return ''; // TODO: add form customizer docs url
80
89
  default:
81
90
  return '';
82
91
  }
@@ -3,7 +3,8 @@ import * as ApplicationCustomizer from '../applicationCustomizer';
3
3
  import * as CommandSet from '../commandSet';
4
4
  import * as FieldCustomizer from '../fieldCustomizer';
5
5
  import * as BaseExtension from './BaseExtensionGenerator';
6
- export interface IExtensionOptions extends FieldCustomizer.IFieldCustomizerOptions, CommandSet.ICommandSetOptions, ApplicationCustomizer.IApplicationCustomizerOptions {
6
+ import * as FormCustomizer from '../formCustomizer';
7
+ export interface IExtensionOptions extends FieldCustomizer.IFieldCustomizerOptions, CommandSet.ICommandSetOptions, ApplicationCustomizer.IApplicationCustomizerOptions, FormCustomizer.IFormCustomizerOptions {
7
8
  extensionType: BaseExtension.AvailableExtensions;
8
9
  }
9
10
  export declare function defineOptions<TOptions extends IBaseOptions, TContext>(generator: BaseGenerator<TOptions, TContext>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/extension/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,KAAK,qBAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,iBACf,SAAQ,eAAe,CAAC,uBAAuB,EAC7C,UAAU,CAAC,kBAAkB,EAC7B,qBAAqB,CAAC,6BAA6B;IACrD,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;CAClD;AAED,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC3C,IAAI,CAON;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACjE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACvC,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAClF,SAAgB,YAAY,EAAE,MAAM,CAAyB;IAEtD,YAAY,IAAI,IAAI;IAId,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDhC,WAAW,IAAI,IAAI;IAGnB,OAAO,IAAI,IAAI;IAGf,OAAO,IAAI,IAAI;IAGf,GAAG,IAAI,IAAI;IAIlB,SAAS,aAAa,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB;IAIzE,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/extension/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,KAAK,qBAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,eAAe,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,iBACf,SAAQ,eAAe,CAAC,uBAAuB,EAC7C,UAAU,CAAC,kBAAkB,EAC7B,qBAAqB,CAAC,6BAA6B,EACnD,cAAc,CAAC,sBAAsB;IACvC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;CAClD;AAED,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC3C,IAAI,CAQN;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACjE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACvC,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAClF,SAAgB,YAAY,EAAE,MAAM,CAAyB;IAEtD,YAAY,IAAI,IAAI;IAId,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DhC,WAAW,IAAI,IAAI;IAGnB,OAAO,IAAI,IAAI;IAGf,OAAO,IAAI,IAAI;IAGf,GAAG,IAAI,IAAI;IAIlB,SAAS,aAAa,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB;IAIzE,OAAO,CAAC,aAAa;CAGtB"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -29,11 +33,13 @@ const BaseGenerator_1 = require("../../common/BaseGenerator");
29
33
  const Utils = __importStar(require("../../common/utilities"));
30
34
  const CommandSet = __importStar(require("../commandSet"));
31
35
  const FieldCustomizer = __importStar(require("../fieldCustomizer"));
36
+ const FormCustomizer = __importStar(require("../formCustomizer"));
32
37
  function defineOptions(generator) {
33
38
  FieldCustomizer.defineOptions(generator);
34
39
  CommandSet.defineOptions(generator);
40
+ FormCustomizer.defineOptions(generator);
35
41
  generator.option('extension-type', {
36
- description: `The type of extension. Currently "ApplicationCustomizer", "FieldCustomizer", "ListViewCommandSet", or "SearchQueryModifier" (beta)`,
42
+ description: `The type of extension. Currently "ApplicationCustomizer", "FieldCustomizer", "ListViewCommandSet", "FormCustomizer", or "SearchQueryModifier" (beta)`,
37
43
  type: String
38
44
  });
39
45
  }
@@ -70,6 +76,10 @@ class ExtensionSelectorGenerator extends BaseGenerator_1.BaseGenerator {
70
76
  {
71
77
  name: 'ListView Command Set',
72
78
  value: 'ListViewCommandSet'
79
+ },
80
+ {
81
+ name: 'Form Customizer',
82
+ value: 'FormCustomizer'
73
83
  }
74
84
  ];
75
85
  if (this.config.get('plusBeta') === true) {
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -87,7 +91,7 @@ class FieldCustomizerGenerator extends BaseExtension.BaseExtensionGenerator {
87
91
  }
88
92
  }
89
93
  end() {
90
- /* no-op */
94
+ super.end();
91
95
  }
92
96
  includeClientSideInstances() {
93
97
  return false;
@@ -1,3 +1,3 @@
1
- .<%= componentName %> {
1
+ .<%= componentNameCamelCase %> {
2
2
  color: inherit;
3
3
  }
@@ -20,7 +20,7 @@ export default class <%= componentClassName %>
20
20
  }
21
21
 
22
22
  public onRenderCell(event: IFieldCustomizerCellEventParameters): void {
23
- event.domElement.classList.add(styles.<%= componentName %>);
23
+ event.domElement.classList.add(styles.<%= componentNameCamelCase %>);
24
24
  }
25
25
 
26
26
  public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
@@ -1,4 +1,4 @@
1
- .<%= componentName %> {
1
+ .<%= componentNameCamelCase %> {
2
2
  background-color: "[theme:themePrimary, default:#0078d4]";
3
3
  color: "[theme:white, default:#ffffff]";
4
4
  text-align: center;
@@ -37,7 +37,7 @@ export default class <%= componentClassName %>
37
37
 
38
38
  event.domElement.innerText = text;
39
39
 
40
- event.domElement.classList.add(styles.<%= componentName %>);
40
+ event.domElement.classList.add(styles.<%= componentNameCamelCase %>);
41
41
  }
42
42
 
43
43
  public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
@@ -1,4 +1,4 @@
1
- .<%= componentName %> {
1
+ .<%= componentNameCamelCase %> {
2
2
  background-color: "[theme:themePrimary, default:#0078d4]";
3
3
  color: "[theme:white, default:#ffffff]";
4
4
  text-align: center;
@@ -20,7 +20,7 @@ export default class <%= componentName %> extends React.Component<I<%= component
20
20
 
21
21
  public render(): React.ReactElement<{}> {
22
22
  return (
23
- <div className={styles.<%= componentName %>}>
23
+ <div className={styles.<%= componentNameCamelCase %>}>
24
24
  { this.props.text }
25
25
  </div>
26
26
  );
@@ -0,0 +1,24 @@
1
+ import { IBaseOptions, BaseGenerator, AvailableTemplates } from '../../common/BaseGenerator';
2
+ import * as BaseExtension from '../extension/BaseExtensionGenerator';
3
+ export interface IFormCustomizerOptions extends BaseExtension.IBaseExtensionOptions {
4
+ }
5
+ export interface IFormCustomizerContext extends BaseExtension.IBaseExtensionContext {
6
+ }
7
+ export declare function composeWith<TOptions extends IBaseOptions, TContext>(base: BaseGenerator<TOptions, TContext>, options: IBaseOptions): void;
8
+ export declare function defineOptions<TOptions extends IBaseOptions, TContext>(generator: BaseGenerator<TOptions, TContext>): void;
9
+ export declare class FormCustomizerGenerator extends BaseExtension.BaseExtensionGenerator<IFormCustomizerOptions, IFormCustomizerContext> {
10
+ protected readonly friendlyName: string;
11
+ protected readonly codeName: string;
12
+ protected readonly allowedTemplates: AvailableTemplates[];
13
+ initializing(): void;
14
+ prompting(): Promise<void>;
15
+ configuring(): void;
16
+ writing(): void;
17
+ install(): void;
18
+ end(): void;
19
+ protected constructor(args: string | string[], options: IFormCustomizerOptions);
20
+ protected addFeature(): void;
21
+ protected includeClientSideInstances(): boolean;
22
+ private shouldExecute;
23
+ }
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/formCustomizer/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAI7F,OAAO,KAAK,aAAa,MAAM,qCAAqC,CAAC;AAErE,MAAM,WAAW,sBAAuB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AACtF,MAAM,WAAW,sBAAuB,SAAQ,aAAa,CAAC,qBAAqB;CAAG;AAEtF,wBAAgB,WAAW,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACjE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACvC,OAAO,EAAE,YAAY,GACpB,IAAI,CAEN;AAED,wBAAgB,aAAa,CAAC,QAAQ,SAAS,YAAY,EAAE,QAAQ,EACnE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC3C,IAAI,CAEN;AAED,qBAAa,uBAAwB,SAAQ,aAAa,CAAC,sBAAsB,CAC/E,sBAAsB,EACtB,sBAAsB,CACvB;IACC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAqB;IAC5D,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAoB;IACvD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAqB;IAEvE,YAAY,IAAI,IAAI;IAIpB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1B,WAAW,IAAI,IAAI;IAgDnB,OAAO,IAAI,IAAI;IAgBf,OAAO,IAAI,IAAI;IAMf,GAAG,IAAI,IAAI;IAIlB,SAAS,aAAa,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,sBAAsB;IAK9E,SAAS,CAAC,UAAU,IAAI,IAAI;IAY5B,SAAS,CAAC,0BAA0B,IAAI,OAAO;IAI/C,OAAO,CAAC,aAAa;CAOtB"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FormCustomizerGenerator = exports.defineOptions = exports.composeWith = void 0;
27
+ const path = __importStar(require("path"));
28
+ const Utils = __importStar(require("../../common/utilities"));
29
+ const YeomanConfiguration_1 = require("../../common/YeomanConfiguration");
30
+ const BaseExtension = __importStar(require("../extension/BaseExtensionGenerator"));
31
+ function composeWith(base, options) {
32
+ Utils.compose(path.basename(__dirname), base, options);
33
+ }
34
+ exports.composeWith = composeWith;
35
+ function defineOptions(generator) {
36
+ BaseExtension.defineOptions(generator, 'Form Customizer');
37
+ }
38
+ exports.defineOptions = defineOptions;
39
+ class FormCustomizerGenerator extends BaseExtension.BaseExtensionGenerator {
40
+ constructor(args, options) {
41
+ super(args, options);
42
+ this.friendlyName = 'Form Customizer';
43
+ this.codeName = 'FormCustomizer';
44
+ this.allowedTemplates = ['react', 'none'];
45
+ defineOptions(this);
46
+ }
47
+ initializing() {
48
+ /* no-op */
49
+ }
50
+ prompting() {
51
+ this.ensureCorrectFolder();
52
+ if (!this.shouldExecute()) {
53
+ return Promise.resolve();
54
+ }
55
+ return super.prompting();
56
+ }
57
+ configuring() {
58
+ if (this.shouldExecute()) {
59
+ super.configuring();
60
+ this.ensureDependencyGroup('formCustomizer');
61
+ // New Form
62
+ this.serveJson.addConfiguration(`${this.context.componentNameCamelCase}_NewForm`, {
63
+ pageUrl: 'https://contoso.sharepoint.com/sites/mySite/_layouts/15/SPListForm.aspx',
64
+ formCustomizer: {
65
+ componentId: this.context.componentId,
66
+ PageType: 8,
67
+ RootFolder: '/sites/mySite/Lists/MyList',
68
+ properties: {
69
+ sampleText: 'Value'
70
+ }
71
+ }
72
+ });
73
+ // Edit Form
74
+ this.serveJson.addConfiguration(`${this.context.componentNameCamelCase}_EditForm`, {
75
+ pageUrl: 'https://contoso.sharepoint.com/sites/mySite/_layouts/15/SPListForm.aspx',
76
+ formCustomizer: {
77
+ componentId: this.context.componentId,
78
+ PageType: 6,
79
+ RootFolder: '/sites/mySite/Lists/MyList',
80
+ ID: 1,
81
+ properties: {
82
+ sampleText: 'Value'
83
+ }
84
+ }
85
+ });
86
+ // View Form
87
+ this.serveJson.addConfiguration(`${this.context.componentNameCamelCase}_ViewForm`, {
88
+ pageUrl: 'https://contoso.sharepoint.com/sites/mySite/_layouts/15/SPListForm.aspx',
89
+ formCustomizer: {
90
+ componentId: this.context.componentId,
91
+ PageType: 4,
92
+ RootFolder: '/sites/mySite/Lists/MyList',
93
+ ID: 1,
94
+ properties: {
95
+ sampleText: 'Value'
96
+ }
97
+ }
98
+ });
99
+ }
100
+ }
101
+ writing() {
102
+ if (this.shouldExecute()) {
103
+ super.writing(false);
104
+ const dest = this._getOutputFolder(this.context.componentNameCamelCase);
105
+ const template = this.context.template;
106
+ this.copyTemplate(path.join(this.sourceRoot(), template), dest);
107
+ if (template !== 'minimal') {
108
+ this.copyTemplate(path.join(this.sourceRoot(), 'loc'), path.join(dest, 'loc'));
109
+ }
110
+ this.copyTemplate(path.join(this.sourceRoot(), 'base'), dest);
111
+ }
112
+ }
113
+ install() {
114
+ if (this.shouldExecute()) {
115
+ super.install();
116
+ }
117
+ }
118
+ end() {
119
+ super.end();
120
+ }
121
+ addFeature() {
122
+ if (!this.hasElementsXml()) {
123
+ const solutionName = YeomanConfiguration_1.YeomanConfiguration.libraryName;
124
+ this.packageSolutionJson.addFeature(Utils.generateGuid(), `${solutionName} Feature`, `The feature that activates elements of the ${solutionName} solution.`, false);
125
+ }
126
+ }
127
+ includeClientSideInstances() {
128
+ return false;
129
+ }
130
+ shouldExecute() {
131
+ return (this.config.get('environment') === 'spo' &&
132
+ this.config.get('componentType') === 'extension' &&
133
+ this.config.get('extensionType') === 'FormCustomizer');
134
+ }
135
+ }
136
+ exports.FormCustomizerGenerator = FormCustomizerGenerator;
137
+ // Yeoman expects exports of this type, which overrides the TS exports above
138
+ // Ensure that anything marked as export above is also listed here
139
+ module.exports = FormCustomizerGenerator;
140
+ module.exports.defineOptions = defineOptions;
141
+ module.exports.composeWith = composeWith;
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://developer.microsoft.com/json-schemas/spfx/client-side-extension-manifest.schema.json",
3
+
4
+ "id": "<%= componentId %>",
5
+ "alias": "<%= componentAlias %>",
6
+ "componentType": "Extension",
7
+ "extensionType": "FormCustomizer",
8
+
9
+ // The "*" signifies that the version should be taken from the package.json
10
+ "version": "*",
11
+ "manifestVersion": 2,
12
+
13
+ // If true, the component can only be installed on sites where Custom Script is allowed.
14
+ // Components that allow authors to embed arbitrary script code should set this to true.
15
+ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f
16
+ "requiresCustomScript": false
17
+ }
@@ -0,0 +1,7 @@
1
+ define([], function() {
2
+ return {
3
+ "Save": "Save",
4
+ "Cancel": "Cancel",
5
+ "Close": "Close"
6
+ }
7
+ });
@@ -0,0 +1,10 @@
1
+ declare interface I<%= componentStrings %> {
2
+ Save: string;
3
+ Cancel: string;
4
+ Close: string;
5
+ }
6
+
7
+ declare module '<%= componentStrings %>' {
8
+ const strings: I<%= componentStrings %>;
9
+ export = strings;
10
+ }
@@ -0,0 +1,5 @@
1
+ .<%= componentNameCamelCase %> {
2
+ background-color: "[theme:white, default:#ffffff]";
3
+ color: "[theme:themePrimary, default:#0078d4]";
4
+ padding: 0.5rem;
5
+ }
@@ -0,0 +1,53 @@
1
+ import { Log } from '@microsoft/sp-core-library';
2
+ import {
3
+ BaseFormCustomizer
4
+ } from '@microsoft/sp-listview-extensibility';
5
+
6
+ import * as strings from '<%= componentStrings %>';
7
+ import styles from './<%= componentClassName %>.module.scss';
8
+
9
+ /**
10
+ * If your form customizer uses the ClientSideComponentProperties JSON input,
11
+ * it will be deserialized into the BaseExtension.properties object.
12
+ * You can define an interface to describe it.
13
+ */
14
+ export interface I<%= componentClassName %>Properties {
15
+ // This is an example; replace with your own property
16
+ sampleText?: string;
17
+ }
18
+
19
+ const LOG_SOURCE: string = '<%= componentClassName %>';
20
+
21
+ export default class <%= componentClassName %>
22
+ extends BaseFormCustomizer<I<%= componentClassName %>Properties> {
23
+
24
+ public onInit(): Promise<void> {
25
+ // Add your custom initialization to this method. The framework will wait
26
+ // for the returned promise to resolve before rendering the form.
27
+ Log.info(LOG_SOURCE, 'Activated <%= componentClassName %> with properties:');
28
+ Log.info(LOG_SOURCE, JSON.stringify(this.properties, undefined, 2));
29
+ return Promise.resolve();
30
+ }
31
+
32
+ public render(): void {
33
+ // Use this method to perform your custom rendering.
34
+ this.domElement.innerHTML = `<div class="${ styles.<%= componentNameCamelCase %> }"></div>`;
35
+ }
36
+
37
+ public onDispose(): void {
38
+ // This method should be used to free any resources that were allocated during rendering.
39
+ super.onDispose();
40
+ }
41
+
42
+ private _onSave = (): void => {
43
+
44
+ // You MUST call this.formSaved() after you save the form.
45
+ this.formSaved();
46
+ }
47
+
48
+ private _onClose = (): void => {
49
+
50
+ // You MUST call this.formClosed() after you close the form.
51
+ this.formClosed();
52
+ }
53
+ }
@@ -0,0 +1,5 @@
1
+ .<%= componentNameCamelCase %> {
2
+ background-color: "[theme:white, default:#ffffff]";
3
+ color: "[theme:themePrimary, default:#0078d4]";
4
+ padding: 0.5rem;
5
+ }