Skip to content

Commit 4d8cea8

Browse files
committed
feat(grid-crm): add live editing config
1 parent baab7bd commit 4d8cea8

12 files changed

Lines changed: 204 additions & 89 deletions

File tree

.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: 106 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,37 @@ const submodule = "igniteui-live-editing-samples";
1818

1919
gulp.task("generate-live-editing", async () => {
2020
var appDv = argv.appDv !== undefined && argv.appDv.toLowerCase().trim() === "true";
21-
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',
21+
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',
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,92 +139,100 @@ 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+
console.log('process start')
143+
if (!fs.existsSync(submodule)) {
132144
return console.error("No submodule found");
133145
}
134146
const directories = [];
135147
const appExcludedDirectories = excludedDirectories.concat(directoriesToExclude);
136148
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()) {
149+
appDir.filter(dir => appExcludedDirectories.indexOf(dir) === -1)
150+
.forEach(child => {
151+
if (fs.lstatSync(`${projectPath + "/app"}/${child}`).isDirectory()) {
140152
directories.push(child);
141153
}
142-
});
154+
});
155+
143156
const jsonSamplesPath = path.join(__dirname, `${projectPath}/assets/samples`);
144157
const sharedJson = JSON.parse(fs.readFileSync(path.join(jsonSamplesPath, "/shared.json")));
145158
const submoduleAppDest = submodule + `/${dest}/`;
146-
if(!fs.existsSync(submoduleAppDest)) {
159+
if (!fs.existsSync(submoduleAppDest)) {
147160
fs.mkdirSync(submoduleAppDest);
148161
}
149162

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

216-
const processDemosWithScss = () => processApp("src", "angular-demos", "data");
235+
const processDemosWithScss = () => processApp("src", "angular-demos", "data");
217236
const processDemosLobWithScss = () => processApp("projects/app-lob/src", "angular-demos-lob", "services");
218237

219238
let repositoryfyAngularDemos;
@@ -231,4 +250,4 @@ const cleanupAngularDemosLob = (cb) => {
231250
cb();
232251
}
233252
exports.repositoryfyAngularDemos = repositoryfyAngularDemos = gulp.series(cleanupAngularDemos, processDemosWithScss);
234-
exports.repositoryfyAngularDemosLob = repositoryfyAngularDemosLob = gulp.series(cleanupAngularDemosLob, processDemosLobWithScss);
253+
exports.repositoryfyAngularDemosLob = repositoryfyAngularDemosLob = gulp.series(cleanupAngularDemosLob, processDemosLobWithScss);

live-editing/Routes.ts

Lines changed: 12 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/app.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,8 @@ 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';
4953

5054
export const MODULE_ROUTES = [
5155
{
@@ -157,3 +161,11 @@ export const DV_MODULE_ROUTES = [
157161
routes: GridFinJSDockManagerRoutingModule.gridFinJsDockManagerGridRoutes
158162
}
159163
];
164+
165+
export const CRM_MODULE_ROUTES = [
166+
{
167+
module: AppModule,
168+
path: 'grid-crm',
169+
routes: GridCRMRouting.appRoutes
170+
}
171+
];
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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 { Config, IConfigGenerator, AppModuleConfig } from 'igniteui-live-editing';
14+
import { BrowserModule, HammerModule } from '@angular/platform-browser';
15+
import { RouterModule } from '@angular/router';
16+
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
17+
import { FormsModule } from '@angular/forms';
18+
19+
export class GridCRMConfigGenerator implements IConfigGenerator {
20+
public generateConfigs(): Config[] {
21+
const configs = new Array<Config>();
22+
23+
configs.push(new Config({
24+
component: 'GridCRMComponent',
25+
additionalFiles: ['/src/app/directives/prevent-scroll.directive.ts',
26+
'/projects/app-crm/src/_app-layout.scss', '/projects/app-crm/src/_variables.scss'],
27+
additionalDependencies: [],
28+
appModuleConfig: new AppModuleConfig({
29+
imports: ['BrowserModule', 'RouterModule', 'BrowserAnimationsModule', 'FormsModule', 'HammerModule'],
30+
ngDeclarations: ['GridCRMComponent'],
31+
ngImports: ['IgxAutocompleteModule', 'IgxRippleModule', 'IgxGridModule', 'IgxIconModule', 'IgxLayoutModule',
32+
'IgxAvatarModule', 'IgxInputGroupModule', 'IgxButtonModule', 'IgxPreventDocumentScrollModule']
33+
})
34+
}));
35+
36+
return configs;
37+
}
38+
}
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: 2 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",
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>

projects/app-crm/src/app/app.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from 'igniteui-angular';
1010
import { IgxPreventDocumentScrollModule } from '../../../../src/app/directives/prevent-scroll.directive';
1111
import { AppComponent } from './app.component';
12+
import { AppRoutingModule } from './app.routing.module';
1213
import { GridCRMComponent } from './grid-crm/grid-crm.component';
1314

1415
@NgModule({
@@ -26,7 +27,7 @@ import { GridCRMComponent } from './grid-crm/grid-crm.component';
2627
IgxAvatarModule,
2728
IgxInputGroupModule,
2829
BrowserModule,
29-
RouterModule.forRoot([]),
30+
AppRoutingModule,
3031
BrowserAnimationsModule,
3132
IgxButtonModule,
3233
FormsModule,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { NgModule } from '@angular/core';
2+
import { RouterModule, Routes } from '@angular/router';
3+
import { GridCRMComponent } from './grid-crm/grid-crm.component';
4+
5+
export const appRoutes: Routes = [
6+
{
7+
path: '',
8+
pathMatch: 'full',
9+
component: GridCRMComponent
10+
}
11+
];
12+
13+
@NgModule({
14+
exports: [
15+
RouterModule
16+
],
17+
imports: [
18+
RouterModule.forRoot(appRoutes)
19+
]
20+
})
21+
export class AppRoutingModule { }

projects/app-crm/src/assets/samples/app.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)