diff --git a/CHANGELOG.md b/CHANGELOG.md index d1fe6d9b5..d2ffe7f4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ Changelog is rather internal in nature. See release notes for the public overvie ## Upcoming version 5.x.x (`develop` branch) +[#707] + - **Description:** Card Validations + - **Products impact:** + - **Addresses:** [#695](https://github.com/learningequality/kolibri-design-system/issues/695) + - **Components:** `KCard` + - **Breaking:** No + - **Impacts a11y:** No + - **Guidance:** + [#707] https://github.com/learningequality/kolibri-design-system/pull/707 + [#709] - **Description:** Update spaces to the latest design`KCard` - **Products impact:** Card updates diff --git a/lib/KCard/index.vue b/lib/KCard/index.vue index 1a2a11967..d4ee0d96a 100644 --- a/lib/KCard/index.vue +++ b/lib/KCard/index.vue @@ -72,6 +72,30 @@ import BaseCard from './BaseCard.vue'; + const Layouts = { + HORIZONTAL: 'horizontal', + VERTICAL: 'vertical', + }; + + const Thumbnail_Displays = { + NONE: 'none', + SMALL: 'small', + LARGE: 'large', + }; + + function cardValidator(allowedValues, propName) { + return function(value) { + if (!Object.values(allowedValues).includes(value)) { + throw new Error( + `Invalid ${propName} value: '${value}'. Allowed values are: ${Object.values( + allowedValues + ).join(', ')}` + ); + } + return true; + }; + } + export default { name: 'KCard', components: { BaseCard }, @@ -110,6 +134,7 @@ layout: { type: String, default: 'horizontal', + validator: cardValidator(Layouts, 'layout'), }, /** * Controls how the thumbnail appears in the card. @@ -117,8 +142,8 @@ * */ thumbnailDisplay: { type: String, - required: false, default: 'none', + validator: cardValidator(Thumbnail_Displays, 'thumbnailDisplay'), }, /** * Sets the thumbnail path. @@ -160,13 +185,13 @@ return this.stylesAndClasses.thumbnailStyles; }, /* - Returns dynamic classes and few style-like data that CSS was cumbersome/impossible to use for ,or are in need of using theme, grouped by all possible combinations of layouts. + Returns dynamic classes and few style-like data that CSS was cumbersome/impossible to use for ,or are in need of using theme, grouped by all possible combinations of layouts. - New styles and classes are meant to be added to this single-source-of-truth object so - that we can easily locate all styling being applied to a particular layout + New styles and classes are meant to be added to this single-source-of-truth object so + that we can easily locate all styling being applied to a particular layout - Could be further simplified by using solely dynamic styles, but that would have detrimental effects on our auto RTL machinery and we would need to take care manually of more places. - */ + Could be further simplified by using solely dynamic styles, but that would have detrimental effects on our auto RTL machinery and we would need to take care manually of more places. + */ stylesAndClasses() { /* In px. Needs to be the same as $spacer variable in styles part */ const SPACER = 24;