Skip to content

Commit 2022f64

Browse files
#1143: Make flat patterns on view all pages optional
1 parent c6d46a4 commit 2022f64

File tree

12 files changed

+121
-12
lines changed

12 files changed

+121
-12
lines changed

packages/cli/test/fixtures/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"patternExportDirectory": "./pattern_exports/",
7474
"patternExportPatternPartials": [],
7575
"patternMergeVariantArrays": true,
76+
"renderFlatPatternsOnViewAllPages": false,
7677
"serverOptions": {
7778
"wait": 1000
7879
},

packages/core/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
"patternExportPreserveDirectoryStructure": true,
7777
"patternExportRaw": false,
7878
"patternMergeVariantArrays": true,
79+
"renderFlatPatternsOnViewAllPages": false,
7980
"serverOptions": {
8081
"wait": 1000
8182
},

packages/core/src/lib/ui_builder.js

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,12 @@ const ui_builder = function() {
417417
groupedPatterns.patternGroups[pattern.patternGroup] = {};
418418
pattern.isSubtypePattern = false;
419419
addPatternType(patternlab, pattern);
420-
addPatternItem(patternlab, pattern, true);
420+
if (
421+
!pattern.isFlatPattern ||
422+
patternlab.config.renderFlatPatternsOnViewAllPages
423+
) {
424+
addPatternItem(patternlab, pattern, true);
425+
}
421426
addToViewAllPaths(patternlab, pattern);
422427
}
423428

@@ -629,15 +634,17 @@ const ui_builder = function() {
629634
patternType
630635
);
631636

632-
// Check if this is a flat pattern group
633-
typePatterns = sortedFlatPatterns.concat(typePatterns);
637+
if (patternlab.config.renderFlatPatternsOnViewAllPages) {
638+
// Check if this is a flat pattern group
639+
typePatterns = sortedFlatPatterns.concat(typePatterns);
640+
}
634641

635642
// get the appropriate patternType
636643
const anyPatternOfType = _.find(typePatterns, function(pat) {
637644
return pat.patternType && pat.patternType !== '';
638645
});
639646

640-
if (!anyPatternOfType) {
647+
if (!anyPatternOfType || !typePatterns.length) {
641648
logger.debug(
642649
`skipping ${patternType} as flat patterns do not have view all pages`
643650
);
@@ -676,8 +683,12 @@ const ui_builder = function() {
676683
`Omitting ${patternType} from building a viewall page because its patternGroup is specified in styleguideExcludes.`
677684
);
678685
} else {
679-
patterns = sortedFlatPatterns;
680-
patterns = patterns.concat(styleguideTypePatterns);
686+
if (patternlab.config.renderFlatPatternsOnViewAllPages) {
687+
patterns = sortedFlatPatterns;
688+
patterns = patterns.concat(styleguideTypePatterns);
689+
} else {
690+
patterns = styleguideTypePatterns;
691+
}
681692
}
682693
return Promise.resolve(patterns);
683694
})
@@ -698,10 +709,14 @@ const ui_builder = function() {
698709
}
699710
);
700711

701-
return Promise.all(allPatternTypePromises).catch(reason => {
702-
console.log(reason);
703-
logger.error('Error during buildViewAllPages');
704-
});
712+
return Promise.all(allPatternTypePromises)
713+
.then(allPatterns =>
714+
Promise.resolve(_.filter(allPatterns, p => p.length))
715+
)
716+
.catch(reason => {
717+
console.log(reason);
718+
logger.error('Error during buildViewAllPages');
719+
});
705720
}
706721

707722
/**

packages/core/test/ui_builder_tests.js

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ tap.test('resetUIBuilderState - reset global objects', function(test) {
527527
});
528528

529529
tap.test(
530-
'buildViewAllPages - adds viewall page for each type and subtype',
530+
'buildViewAllPages - adds viewall page for each type and subtype NOT! for flat patterns',
531531
function(test) {
532532
//arrange
533533
const mainPageHeadHtml = '<head></head>';
@@ -554,6 +554,76 @@ tap.test(
554554

555555
const styleguidePatterns = ui.groupPatterns(patternlab, uikit);
556556

557+
//act
558+
ui.buildViewAllPages(
559+
mainPageHeadHtml,
560+
patternlab,
561+
styleguidePatterns,
562+
uikit
563+
).then(allPatterns => {
564+
// assert
565+
// this was a nuanced one. buildViewAllPages() had return false; statements
566+
// within _.forOwn(...) loops, causing premature termination of the entire loop
567+
// when what was intended was a continue
568+
// we expect 10 here because:
569+
// - foo.mustache is flat and therefore does not have a viewall page
570+
// - the colors.mustache files make 6
571+
// - patternSubType1 and patternSubType2 make 8
572+
// - the general view all page make 9
573+
// while most of that heavy lifting occurs inside groupPatterns and not buildViewAllPages,
574+
// it's important to ensure that this method does not get prematurely terminated
575+
// we choose to do that by checking it's return number of patterns
576+
577+
const uniquePatterns = ui.uniqueAllPatterns(allPatterns, patternlab);
578+
579+
/**
580+
* - view-patternType1-all
581+
* -- viewall-patternType1-patternSubType1
582+
* --- blue
583+
* --- red
584+
* --- yellow
585+
* -- viewall-patternType1-patternSubType2
586+
* --- black
587+
* --- grey
588+
* --- white
589+
*/
590+
test.equals(uniquePatterns.length, 9, '3 viewall pages should be added');
591+
592+
test.end();
593+
});
594+
}
595+
);
596+
597+
tap.test(
598+
'buildViewAllPages - adds viewall page for each type and subtype FOR! flat patterns',
599+
function(test) {
600+
//arrange
601+
const mainPageHeadHtml = '<head></head>';
602+
const patternlab = createFakePatternLab({
603+
patterns: [],
604+
patternGroups: {},
605+
subtypePatterns: {},
606+
footer: {},
607+
userFoot: {},
608+
cacheBuster: 1234,
609+
});
610+
611+
patternlab.config.renderFlatPatternsOnViewAllPages = true;
612+
613+
patternlab.patterns.push(
614+
//this flat pattern is found and causes trouble for the rest of the crew
615+
new Pattern('00-test/foo.mustache'),
616+
new Pattern('patternType1/patternSubType1/blue.mustache'),
617+
new Pattern('patternType1/patternSubType1/red.mustache'),
618+
new Pattern('patternType1/patternSubType1/yellow.mustache'),
619+
new Pattern('patternType1/patternSubType2/black.mustache'),
620+
new Pattern('patternType1/patternSubType2/grey.mustache'),
621+
new Pattern('patternType1/patternSubType2/white.mustache')
622+
);
623+
ui.resetUIBuilderState(patternlab);
624+
625+
const styleguidePatterns = ui.groupPatterns(patternlab, uikit);
626+
557627
//act
558628
ui.buildViewAllPages(
559629
mainPageHeadHtml,
@@ -569,6 +639,8 @@ tap.test(
569639
// - foo.mustache is flat and therefore does not have a viewall page
570640
// - the colors.mustache files make 6
571641
// - patternSubType1 and patternSubType2 make 8
642+
// - the general view all page make 9
643+
// - the view-all page of test and test-foo make 11
572644
// while most of that heavy lifting occurs inside groupPatterns and not buildViewAllPages,
573645
// it's important to ensure that this method does not get prematurely terminated
574646
// we choose to do that by checking it's return number of patterns

packages/core/test/util/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"patternExportDirectory": "./pattern_exports/",
5959
"patternExtension": "mustache",
6060
"patternMergeVariantArrays": true,
61+
"renderFlatPatternsOnViewAllPages": false,
6162
"cacheBust": true,
6263
"outputFileSuffixes": {
6364
"rendered": ".rendered",

packages/development-edition-engine-handlebars/patternlab-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@
7070
"patternExportPatternPartials": [],
7171
"patternExportPreserveDirectoryStructure": true,
7272
"patternExportRaw": false,
73-
"patternMergeVariantArrays": true,
73+
"patternMergeVariantArrays": false,
74+
"renderFlatPatternsOnViewAllPages": false,
7475
"serverOptions": {
7576
"wait": 1000
7677
},

packages/development-edition-engine-react/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
"patternExportDirectory": "./pattern_exports/",
7777
"patternExportPatternPartials": [],
7878
"patternMergeVariantArrays": true,
79+
"renderFlatPatternsOnViewAllPages": false,
7980
"serverOptions": {
8081
"wait": 1000
8182
},

packages/development-edition-engine-twig/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
"patternExportDirectory": "pattern_exports",
8282
"patternExportPatternPartials": [],
8383
"patternMergeVariantArrays": true,
84+
"renderFlatPatternsOnViewAllPages": false,
8485
"serverOptions": {
8586
"wait": 1000
8687
},

packages/docs/src/docs/advanced-config-options.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,19 @@ Used to override the merge behavior of pattern variants. For more information se
199199

200200
**default**: `true` | `undefined`
201201

202+
### renderFlatPatternsOnViewAllPages
203+
204+
Used to activate rendering flat patterns on view all pages and generate view all pages if only flat patterns are available
205+
206+
- `true` will render flat patterns on view all pages
207+
- `false` will make flat patterns available only in the menu
208+
209+
```javascript
210+
"renderFlatPatternsOnViewAllPages": true,
211+
```
212+
213+
**default**: `false` | `undefined`
214+
202215
### serverOptions
203216

204217
Sets live-server options. See the [live-server documentation](https://github.com/pattern-lab/live-server#usage-from-node) for more details.

packages/edition-node-gulp/patternlab-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
"patternExportPreserveDirectoryStructure": true,
7777
"patternExportRaw": false,
7878
"patternMergeVariantArrays": true,
79+
"renderFlatPatternsOnViewAllPages": false,
7980
"serverOptions": {
8081
"wait": 1000
8182
},

0 commit comments

Comments
 (0)