1
0
Fork 0

Merge pull request #6079 from freesewing/joost

feat: Changes to handle per-set bust plugin conditionality
This commit is contained in:
Joost De Cock 2024-02-17 16:51:54 +01:00 committed by GitHub
commit 96ef465b33
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 51 additions and 17 deletions

View file

@ -1,3 +1,20 @@
Unreleased:
Changed:
brian:
- Always load plugin-bust due to its changes in how it handle conditionality.
plugin-bust:
- This plugin now uses the `preSetDraft` rather than `preDraft` lifecycle hook
- Conditionality has been moved to the `preSetDraft` lifecycle hook, rather than exposing a `withCondition` named export
- The plugin will now always be loaded, but will check for each drafted set whether it should make any changes.
Deprecated:
plugin-bust:
- The `withCondition` named export is deprecated and will always return true.
Fixed:
hugo:
- Add missing dimension id attributes
3.2.0:
date: 2024-02-11

View file

@ -1,4 +1,4 @@
import { withCondition as bustPlugin } from '@freesewing/plugin-bust'
import { bustPlugin } from '@freesewing/plugin-bust'
export const base = {
name: 'brian.base',

View file

@ -20,4 +20,7 @@ pattern.on('preDraft', pattern => {
## Notes
The `preDraft` hook is rarely used, but it's there if you need it.
The `preDraft` hook fires once for all the sets in the pattern.
While typically, there is only one set, there might be more.
In that case, the [`preSetDraft` lifecycle hook](/reference/hooks/presetdraft) is
the per-set equivalent of this hook.

View file

@ -21,4 +21,15 @@ pattern.on('preSetDraft', pattern => {
## Notes
The `preSetDraft` hook is rarely used, but it's there if you need it.
The `preSetDraft` fires once for each set in the pattern.
The pattern tracks the active set on the `activeSet` property.
So if you are using this hook and would like to get access to teh active set, you can do so like this:
```js
pattern.on('preSetDraft', ({ settings, activeSet }) => {
const set = settings[Number(activeSet)]
// Now set holds the active set of settings
}
```

View file

@ -4,13 +4,12 @@ export const plugin = {
name,
version,
hooks: {
preDraft: function ({ settings }) {
for (const i in settings) {
if (settings[i].measurements) {
if (typeof settings[i].measurements.bust === 'undefined') {
settings[i].measurements.bust = settings[i].measurements.chest
settings[i].measurements.chest = settings[i].measurements.highBust
}
preSetDraft: function ({ settings, activeSet }) {
const set = settings[Number(activeSet)]
if (set.measurements && set.options?.draftForHighBust && set.measurements?.highBust) {
if (typeof set.measurements.bust === 'undefined') {
set.measurements.bust = set.measurements.chest
set.measurements.chest = set.measurements.highBust
}
}
},
@ -24,6 +23,11 @@ export const pluginBust = plugin
// Helper method to conditionally load this plugin
export const withCondition = {
plugin,
condition: (settings = false) =>
settings?.options?.draftForHighBust && settings?.measurements?.highBust ? true : false,
condition: () => {
console.log(
"WARNING: The 'withCondition' named export in @freesewing/plugin-bust is deprecated. Conditionality has moved to the preSetDraft lifecycle hook"
)
return true
},
}

View file

@ -6,9 +6,10 @@ const measurements = {
chest: 100,
highBust: 90,
}
const options = { draftForHighBust: true }
const Pattern = new Design()
const pattern = new Pattern({ measurements }).use(plugin)
const pattern = new Pattern({ measurements, options }).use(plugin)
pattern.draft()
describe('Bust plugin Tests', () => {
@ -18,9 +19,7 @@ describe('Bust plugin Tests', () => {
})
it('Should copy measurement from chest to bust and from highBust to chest', function () {
const testPattern = new Design({
measurements: [],
})
const testPattern = new Design({ measurements: [], options })
const pattern = new testPattern().use(plugin)
const userMeasurements = { chest: 50, highBust: 60 }
pattern.settings[0].measurements = userMeasurements
@ -30,7 +29,7 @@ describe('Bust plugin Tests', () => {
})
it('Should not overwrite existing bust measurements', function () {
let config = { measurements: [] }
let config = { measurements: [], options }
const testPattern = new Design(config, plugin)
let pattern = new testPattern()
let userMeasurements = { chest: 50, highBust: 60, bust: 55 }