Skip to content

Commit 8280ad3

Browse files
authored
Merge pull request #3197 from IgniteUI/snovoselski/add-crm-sample-live-editing
feat(grid-crm): add live editing config
2 parents 3721ca5 + 8e2171c commit 8280ad3

15 files changed

Lines changed: 293 additions & 107 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
# samples assets
1212
/src/assets/samples
1313
/projects/app-lob/src/assets/samples
14+
/projects/app-crm/src/assets/samples
1415

1516
# IDEs and editors
1617
/.idea

.vscode/launch.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@
2727
],
2828
"console": "internalConsole",
2929
},
30+
{
31+
"name": "Launch App CRM Live-editing",
32+
"type": "node",
33+
"request": "launch",
34+
"program": "${workspaceRoot}/node_modules/gulp/bin/gulp.js",
35+
"stopOnEntry": false,
36+
"args": ["generate-live-editing", "--appCrm=true"],
37+
"cwd": "${workspaceRoot}",
38+
"runtimeArgs": [
39+
"--nolazy"
40+
],
41+
"console": "internalConsole",
42+
},
3043
{
3144
"name": "Launch Repositoryfy",
3245
"type": "node",

gulpfile.js

Lines changed: 110 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,36 @@ const submodule = "igniteui-live-editing-samples";
1919
gulp.task("generate-live-editing", async () => {
2020
var appDv = argv.appDv !== undefined && argv.appDv.toLowerCase().trim() === "true";
2121
const liveEditingOptions = appDv ?
22-
{
23-
platform: 'angular',
24-
projectDir: "./projects/app-lob",
25-
samplesDir: "./projects/app-lob/src/assets",
26-
configGeneratorPath: "./live-editing/generators/AppDVConfigGenerators.ts",
27-
module: {
28-
moduleName: "DV_MODULE_ROUTES", routerPath: './live-editing/Routes.ts',
22+
{
23+
platform: 'angular',
24+
projectDir: "./projects/app-lob",
25+
samplesDir: "./projects/app-lob/src/assets",
26+
configGeneratorPath: "./live-editing/generators/AppDVConfigGenerators.ts",
27+
module: {
28+
moduleName: "DV_MODULE_ROUTES", routerPath: './live-editing/Routes.ts',
29+
}
2930
}
30-
}
3131
:
32-
{
33-
platform: 'angular',
34-
samplesDir: "./src/assets",
35-
configGeneratorPath: "./live-editing/generators/ConfigGenerators.ts",
36-
module: {
37-
moduleName: "MODULE_ROUTES", routerPath: './live-editing/Routes.ts',
38-
},
39-
additionalSharedStyles: ["_variables.scss", "_app-layout.scss"]
40-
}
32+
(argv.appCrm ?
33+
{
34+
platform: 'angular',
35+
projectDir: "./projects/app-crm",
36+
samplesDir: "./projects/app-crm/src/assets",
37+
configGeneratorPath: "./live-editing/generators/AppCRMConfigGenerators.ts",
38+
module: {
39+
moduleName: "CRM_MODULE_ROUTES", routerPath: './live-editing/Routes.ts',
40+
}
41+
}
42+
:
43+
{
44+
platform: 'angular',
45+
samplesDir: "./src/assets",
46+
configGeneratorPath: "./live-editing/generators/ConfigGenerators.ts",
47+
module: {
48+
moduleName: "MODULE_ROUTES", routerPath: './live-editing/Routes.ts',
49+
},
50+
additionalSharedStyles: ["_variables.scss", "_app-layout.scss"]
51+
})
4152
await generateLiveEditing(liveEditingOptions);
4253
});
4354

@@ -128,96 +139,101 @@ const getSampleNameFromFileName = (fileName, sampleBaseDir) => fileName.replace(
128139
var assetsRegex = new RegExp(/([\.]{0,2}\/)*assets\//g);
129140

130141
const processApp = (projectPath, dest, directoriesToExclude) => {
131-
if(!fs.existsSync(submodule)) {
142+
if (!fs.existsSync(submodule)) {
132143
return console.error("No submodule found");
133144
}
134145
const directories = [];
135146
const appExcludedDirectories = excludedDirectories.concat(directoriesToExclude);
136147
const appDir = fs.readdirSync(projectPath + "/app", "utf-8");
137-
appDir.filter(dir => appExcludedDirectories.indexOf(dir) === -1 )
138-
.forEach(child => {
139-
if(fs.lstatSync(`${projectPath + "/app"}/${child}`).isDirectory()) {
148+
appDir.filter(dir => appExcludedDirectories.indexOf(dir) === -1)
149+
.forEach(child => {
150+
if (fs.lstatSync(`${projectPath + "/app"}/${child}`).isDirectory()) {
140151
directories.push(child);
141152
}
142-
});
153+
});
154+
143155
const jsonSamplesPath = path.join(__dirname, `${projectPath}/assets/samples`);
144156
const sharedJson = JSON.parse(fs.readFileSync(path.join(jsonSamplesPath, "/shared.json")));
145157
const submoduleAppDest = submodule + `/${dest}/`;
146-
if(!fs.existsSync(submoduleAppDest)) {
158+
if (!fs.existsSync(submoduleAppDest)) {
147159
fs.mkdirSync(submoduleAppDest);
148160
}
149161

150162
let i = 0;
151-
return gulp.src([`${jsonSamplesPath}/*.json`,`!${jsonSamplesPath}/shared.json`, `!${jsonSamplesPath}/meta.json`])
152-
.pipe(es.map((file, cb) => {
153-
fs.readFile(file.path, 'utf-8', (err, content) => {
154-
// Adjust sample application bundle files
155-
const jsonObj = JSON.parse(content);
156-
const additionals = [];
157-
const packageJson =
158-
{
159-
"path": "package.json",
160-
"hasRelativeAssetsUrls": false,
161-
"content": JSON.stringify({
162-
"dependencies": JSON.parse(jsonObj.sampleDependencies),
163-
"devDependencies": sharedJson.devDependencies }, null, 2)
164-
}
165-
additionals.push(packageJson);
166-
167-
if(jsonObj.addTsConfig) {
168-
additionals.push(sharedJson.tsConfig);
169-
}
170-
171-
jsonObj.sampleFiles = jsonObj.sampleFiles.concat(sharedJson.files).concat(additionals);
172-
173-
// Configure sample application file structure
174-
const fileName = file.path.substring(file.base.length + 1).replace(".json", "");
175-
let sampleBaseDir = fileName.indexOf("--") !== -1 ? fileName.substring(0, fileName.indexOf("--")) : "";
176-
if(sampleBaseDir && !fs.existsSync(submoduleAppDest + sampleBaseDir)) {
177-
fs.mkdirSync(submoduleAppDest + sampleBaseDir);
178-
}
179-
const sampleName = sampleBaseDir ? getSampleNameFromFileName(fileName, sampleBaseDir) : fileName;
180-
const sampleAppPath = submoduleAppDest + sampleBaseDir + "/" + sampleName;
181-
if(!fs.existsSync(sampleAppPath)) {
182-
fs.mkdirSync(sampleAppPath);
183-
}
184-
185-
// Distribute Sample Files
186-
jsonObj.sampleFiles.forEach(sampleFile => {
187-
let sampleContent;
188-
const isProduction = argv.prod !== undefined && argv.prod.toLowerCase().trim() === "true";
189-
const assetsUrl = `https://${isProduction ? "www." : "staging."}infragistics.com/${dest}/assets/`;
190-
if(sampleFile.hasRelativeAssetsUrls) {
191-
sampleContent = sampleFile.content.replace(assetsRegex, assetsUrl);
192-
} else {
193-
sampleContent = sampleFile.content;
163+
return gulp.src([`${jsonSamplesPath}/*.json`, `!${jsonSamplesPath}/shared.json`, `!${jsonSamplesPath}/meta.json`])
164+
.pipe(es.map((file, cb) => {
165+
fs.readFile(file.path, 'utf-8', (err, content) => {
166+
// Adjust sample application bundle files
167+
const jsonObj = JSON.parse(content);
168+
const additionals = [];
169+
const packageJson =
170+
{
171+
"path": "package.json",
172+
"hasRelativeAssetsUrls": false,
173+
"content": JSON.stringify({
174+
"dependencies": JSON.parse(jsonObj.sampleDependencies),
175+
"devDependencies": sharedJson.devDependencies
176+
}, null, 2)
177+
}
178+
additionals.push(packageJson);
179+
180+
if (jsonObj.addTsConfig) {
181+
additionals.push(sharedJson.tsConfig);
182+
}
183+
184+
jsonObj.sampleFiles = jsonObj.sampleFiles.concat(sharedJson.files).concat(additionals);
185+
186+
// Configure sample application file structure
187+
const fileName = file.path.substring(file.base.length + 1).replace(".json", "");
188+
let sampleBaseDir = fileName.indexOf("--") !== -1 ? fileName.substring(0, fileName.indexOf("--")) : "";
189+
if (sampleBaseDir && !fs.existsSync(submoduleAppDest + sampleBaseDir)) {
190+
fs.mkdirSync(submoduleAppDest + sampleBaseDir);
191+
}
192+
const sampleName = sampleBaseDir ? getSampleNameFromFileName(fileName, sampleBaseDir) : fileName;
193+
const sampleAppPath = submoduleAppDest + sampleBaseDir + "/" + sampleName;
194+
195+
if (!fs.existsSync(sampleAppPath)) {
196+
fs.mkdirSync(sampleAppPath);
197+
}
198+
199+
// Distribute Sample Files
200+
jsonObj.sampleFiles.forEach(sampleFile => {
201+
let sampleContent;
202+
const isProduction = argv.prod !== undefined && argv.prod.toLowerCase().trim() === "true";
203+
const assetsUrl = `https://${isProduction ? "www." : "staging."}infragistics.com/${dest}/assets/`;
204+
if (sampleFile.hasRelativeAssetsUrls) {
205+
sampleContent = sampleFile.content.replace(assetsRegex, assetsUrl);
206+
} else {
207+
sampleContent = sampleFile.content;
208+
}
209+
const paths = sampleFile.path.replace("./", "").split("/");
210+
let tempPath = "";
211+
paths.forEach(p => {
212+
tempPath += p + "/";
213+
if (p.indexOf(".") !== -1) {
214+
fs.writeFileSync(sampleAppPath + "/" + tempPath, sampleContent);
215+
} else
216+
if (!fs.existsSync(sampleAppPath + "/" + tempPath)) {
217+
fs.mkdirSync(sampleAppPath + "/" + tempPath)
194218
}
195-
const paths = sampleFile.path.replace("./", "").split("/");
196-
let tempPath = "";
197-
paths.forEach(p => {
198-
tempPath += p + "/";
199-
if(p.indexOf(".") !== -1) {
200-
fs.writeFileSync(sampleAppPath + "/" + tempPath, sampleContent);
201-
} else
202-
if(!fs.existsSync(sampleAppPath + "/" + tempPath)) {
203-
fs.mkdirSync(sampleAppPath + "/" + tempPath)
204-
}
205-
})
206-
});
207-
i++;
208-
console.log(`Processing ${fileName}.json with SCSS styling`);
209-
cb(null, file);
210219
})
211-
}))
212-
.on("error", () => console.log(err))
213-
.on("end", () => console.log(`Geneared ${i} applications with SCSS in ${dest.toUpperCase()} project.`));
220+
});
221+
i++;
222+
console.log(`Processing ${fileName}.json with SCSS styling`);
223+
cb(null, file);
224+
})
225+
}))
226+
.on("error", () => console.log(err))
227+
.on("end", () => console.log(`Generated ${i} applications with SCSS in ${dest.toUpperCase()} project.`));
214228
}
215229

216-
const processDemosWithScss = () => processApp("src", "angular-demos", "data");
230+
const processDemosWithScss = () => processApp("src", "angular-demos", "data");
217231
const processDemosLobWithScss = () => processApp("projects/app-lob/src", "angular-demos-lob", "services");
232+
const processDemosCrmWithScss = () => processApp("projects/app-crm/src", "angular-demos-grid-crm");
218233

219234
let repositoryfyAngularDemos;
220235
let repositoryfyAngularDemosLob;
236+
let repositoryfyAngularDemosCrm;
221237

222238
const cleanupAngularDemos = (cb) => {
223239
fsExtra.removeSync(submodule + "/angular-demos");
@@ -230,5 +246,13 @@ const cleanupAngularDemosLob = (cb) => {
230246
fsExtra.mkdirSync(submodule + "/angular-demos-lob");
231247
cb();
232248
}
249+
250+
const cleanupAngularDemosCrm = (cb) => {
251+
fsExtra.removeSync(submodule + "/angular-demos-grid-crm");
252+
fsExtra.mkdirSync(submodule + "/angular-demos-grid-crm");
253+
cb();
254+
}
255+
233256
exports.repositoryfyAngularDemos = repositoryfyAngularDemos = gulp.series(cleanupAngularDemos, processDemosWithScss);
234-
exports.repositoryfyAngularDemosLob = repositoryfyAngularDemosLob = gulp.series(cleanupAngularDemosLob, processDemosLobWithScss);
257+
exports.repositoryfyAngularDemosLob = repositoryfyAngularDemosLob = gulp.series(cleanupAngularDemosLob, processDemosLobWithScss);
258+
exports.repositoryfyAngularDemosCrm = repositoryfyAngularDemosCrm = gulp.series(cleanupAngularDemosCrm, processDemosCrmWithScss);

live-editing/Routes.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { GridFinjsModule } from '../projects/app-lob/src/app/grid-finjs/grid-fin
44
import * as TreeGridFinjsRouting from '../projects/app-lob/src/app/treegrid-finjs/treegrid-finjs-routing.module';
55
import { TreeGridFinjsModule } from '../projects/app-lob/src/app/treegrid-finjs/treegrid-finjs.module';
66

7+
import * as GridCRMRouting from '../projects/app-crm/src/app/grid-crm/grid-crm-routing.module';
8+
79
import * as GridsDVRouting from '../projects/app-lob/src/app/grid/grids-routing.module';
810
import { GridsDVModule } from '../projects/app-lob/src/app/grid/grids.module';
911
// tslint:disable-next-line: max-line-length
@@ -46,6 +48,9 @@ import { PaginationModule } from '../src/app/pagination/pagination.module';
4648
import * as PaginatorRouting from '../src/app/pagination/pagination-routing.module';
4749
import { PivotGridsModule } from '../src/app/pivot-grid/pivot-grids.module';
4850
import { PivotGridsRoutingModule } from '../src/app/pivot-grid/pivot-grids-routing.module';
51+
import { GridCRMComponent } from '../projects/app-crm/src/app/grid-crm/grid-crm.component';
52+
import { AppModule } from '../projects/app-crm/src/app/app.module';
53+
import { GridsCrmModule } from '../projects/app-crm/src/app/grid-crm/grid-crm.module';
4954

5055
export const MODULE_ROUTES = [
5156
{
@@ -157,3 +162,11 @@ export const DV_MODULE_ROUTES = [
157162
routes: GridFinJSDockManagerRoutingModule.gridFinJsDockManagerGridRoutes
158163
}
159164
];
165+
166+
export const CRM_MODULE_ROUTES = [
167+
{
168+
module: GridsCrmModule,
169+
path: 'grid-crm',
170+
routes: GridCRMRouting.gridCrmRoutes
171+
}
172+
];
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/* eslint-disable max-len */
2+
/* eslint-disable @typescript-eslint/naming-convention */
3+
import {HttpClientModule} from '@angular/common/http';
4+
import {
5+
IgxAutocompleteModule,
6+
IgxRippleModule,
7+
IgxGridModule,
8+
IgxIconModule,
9+
IgxLayoutModule,
10+
IgxAvatarModule,
11+
IgxInputGroupModule,
12+
IgxButtonModule } from 'igniteui-angular';
13+
import { RouterTestingModule } from "@angular/router/testing";
14+
import { Config, IConfigGenerator, AppModuleConfig } from 'igniteui-live-editing';
15+
import { BrowserModule, HammerModule } from '@angular/platform-browser';
16+
import { RouterModule } from '@angular/router';
17+
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
18+
import { FormsModule } from '@angular/forms';
19+
import { IgxPreventDocumentScrollModule } from '../../src/app/directives/prevent-scroll.directive';
20+
21+
export class GridCRMConfigGenerator implements IConfigGenerator {
22+
public generateConfigs(): Config[] {
23+
const configs = new Array<Config>();
24+
25+
configs.push(new Config({
26+
component: 'GridCRMComponent',
27+
additionalFiles: [
28+
'/src/app/directives/prevent-scroll.directive.ts',
29+
'/projects/app-crm/src/_app-layout.scss',
30+
'/projects/app-crm/src/_variables.scss',
31+
'/projects/app-crm/src/app/grid-crm/data.ts'
32+
],
33+
additionalDependencies: [],
34+
appModuleConfig: new AppModuleConfig({
35+
imports: [
36+
'IgxRippleModule',
37+
'IgxGridModule', 'IgxIconModule', 'IgxLayoutModule',
38+
'IgxAvatarModule', 'IgxInputGroupModule', 'IgxButtonModule',
39+
'IgxPreventDocumentScrollModule', 'GridCRMComponent', 'RouterTestingModule'
40+
],
41+
ngDeclarations: ['GridCRMComponent'],
42+
ngImports: ['IgxPreventDocumentScrollModule', 'IgxRippleModule',
43+
'IgxGridModule', 'IgxIconModule', 'IgxLayoutModule',
44+
'IgxAvatarModule', 'IgxInputGroupModule', 'IgxButtonModule', 'RouterTestingModule']
45+
})
46+
}));
47+
48+
return configs;
49+
}
50+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { GridCRMConfigGenerator } from '../configs/GridCRMConfigGenerator';
2+
3+
export const CRM_CONFIG_GENERATORS =
4+
[
5+
GridCRMConfigGenerator
6+
];

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"start:watch-live-editing": "gulp watch-live-editing && node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve -o",
1313
"generate-live-editing": "gulp generate-live-editing",
1414
"generate-live-editing:app-lob": "gulp generate-live-editing --appDv=true",
15+
"generate-live-editing:app-crm": "gulp generate-live-editing --appCrm=true",
1516
"watch-live-editing": "gulp watch-live-editing",
1617
"sass-js-compile-check": "gulp sass-js-compile-check",
1718
"build": "gulp generate-live-editing && gulp overwrite-package-json && node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng build --configuration production",
@@ -22,6 +23,7 @@
2223
"lint:app-lob": "node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng lint app-lob",
2324
"e2e": "ng e2e",
2425
"start:app-crm": "node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng serve app-crm -o",
26+
"start:app-crm:live-editing": "gulp generate-live-editing --appCrm=true && node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng serve app-crm -o",
2527
"start:app-lob": "node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng serve app-lob -o",
2628
"start:app-lob:live-editing": "gulp generate-live-editing --appDv=true && node --max_old_space_size=12192 node_modules/@angular/cli/bin/ng serve app-lob -o",
2729
"lint:app-crm": "ng lint app-crm",
@@ -32,6 +34,8 @@
3234
"repositoryfyAngularDemos:prod": "gulp repositoryfyAngularDemos --configuration production",
3335
"repositoryfyAngularDemosLob": "gulp repositoryfyAngularDemosLob",
3436
"repositoryfyAngularDemosLob:prod": "gulp repositoryfyAngularDemosLob --configuration production",
37+
"repositoryfyAngularDemosCrm": "gulp repositoryfyAngularDemosCrm",
38+
"repositoryfyAngularDemosCrm:prod": "gulp repositoryfyAngularDemosCrm --configuration production",
3539
"build:stats": "ng build --stats-json",
3640
"analyze": "webpack-bundle-analyzer dist/app/stats.json"
3741
},
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<app-grid></app-grid>
1+
<router-outlet></router-outlet>

0 commit comments

Comments
 (0)