Changeset 792af53 in Klonkt for src/services/guardianship/gated.js
- Timestamp:
- 08/07/2026 12:47:33 PM (5 weeks ago)
- Branches:
- main
- Children:
- 0475b13, a29c8c8
- Parents:
- 0db68bd
- git-author:
- Robin <roboburr@…> (08/07/2026 12:47:31 PM)
- git-committer:
- roboburr <roboburr@…> (08/07/2026 12:47:33 PM)
- File:
-
- 1 edited
-
src/services/guardianship/gated.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/guardianship/gated.js
r0db68bd r792af53 60 60 'shaer:externalPlayback': 'external_playback', 61 61 }; 62 /** 63 * De gates die deze Klonkt kent, met hun SOORT. 64 * 65 * Wat gated wordt is een ontwerpkeuze van de implementatie: de FEP levert het 66 * mechanisme (voorstel, tally, settle) en een paar voorbeelden, niet de lijst. 67 * Deze catalogus is die lijst, op een plek. Een gate erbij hoort een regel data 68 * te zijn en geen nieuw stuk scherm. 69 * 70 * `kind` is niet decoratief. De gates verschillen in hoe ze werken en dat mag 71 * een guardian niet hoeven raden: 72 * 73 * setting een stand, aan of uit, terug te draaien 74 * perRequest geen stand maar een stroom beslissingen (5.3 volgverzoeken) 75 * handover draagt gezag OVER; onomkeerbaar zodra de ward hem gebruikt 76 * 77 * `needs` is de trap uit shaer-ahy: zien < afspelen. Je kunt niet afspelen wat 78 * je niet mag zien, dus dat tweede is pas te bewegen als het eerste openstaat. 79 */ 80 export const GATE_CATALOGUE = [ 81 { feature: 'shaer:externalEmbeds', kind: 'setting', reversible: true }, 82 { feature: 'shaer:externalPlayback', kind: 'setting', reversible: true, needs: 'shaer:externalEmbeds' }, 83 // Altijd aan voor een ward (5.3): niet te verzetten, wel te tonen. Een paneel 84 // dat alleen verstelbare dingen laat zien verzwijgt de helft van wat er geldt. 85 { feature: 'shaer:follows', kind: 'perRequest', reversible: true, fixed: true }, 86 ]; 87 88 /** 89 * De gates van een ward als rijen voor het paneel. Puur, zodat de regels 90 * getoetst kunnen worden zonder database of scherm. 91 * 92 * @param settings {feature: true|false|null} -- null is ONBEKEND, niet uit 93 * @param guardianCount aantal guardians, of null als we het niet weten 94 * @param proposals [{feature, value, status}] lopende voorstellen 95 * @param waiting {feature: aantal} wat er per gate op een besluit wacht 96 */ 97 export function gateRows({ settings = {}, guardianCount = null, proposals = [], waiting = {} } = {}) { 98 return GATE_CATALOGUE.map((g) => { 99 const value = Object.prototype.hasOwnProperty.call(settings, g.feature) ? settings[g.feature] : null; 100 // De trap: het bovenliggende moet OPEN staan. Onbekend telt niet als dicht -- 101 // bij een ward elders kennen we de stand niet, en verbergen betekende daar 102 // ooit dat een voorstel nooit geopend kon worden. 103 const blockedBy = g.needs && settings[g.needs] === false ? g.needs : null; 104 return { 105 feature: g.feature, 106 kind: g.kind, 107 reversible: !!g.reversible, 108 value, 109 // Vast staat vast: tonen mag, verzetten niet. 110 adjustable: !g.fixed && !blockedBy, 111 blockedBy: blockedBy || undefined, 112 // Zonder bekend aantal guardians GEEN drempel verzinnen. Nul of een gok 113 // leest als een feit, en dit is precies waar een guardian op afgaat. 114 threshold: (guardianCount && guardianCount > 0) 115 ? { need: thresholdFor(guardianCount), of: guardianCount } : null, 116 proposal: proposals.find((p) => p.feature === g.feature) || undefined, 117 waiting: waiting[g.feature] || undefined, 118 }; 119 }); 120 } 121 62 122 export function featureColumn(feature) { 63 123 return Object.prototype.hasOwnProperty.call(FEATURES, feature) ? FEATURES[feature] : null; … … 239 299 240 300 export default { 301 GATE_CATALOGUE, gateRows, 241 302 tallyGatedSetting, thresholdFor, featureColumn, recordGatedVote, gatedProgress, GATED_WINDOW_MS, 242 303 parseGatedSetting, buildGatedOffer, rememberGatedOffer, recallGatedOffer,
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)