Skip to content

Commit 4bcd049

Browse files
authored
feat(ui5-color-palette): implement show-recent-color functionality (#3113)
1 parent e835a50 commit 4bcd049

File tree

6 files changed

+118
-3
lines changed

6 files changed

+118
-3
lines changed

packages/main/src/ColorPalette.hbs

+9
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,13 @@
2323
>{{colorPaleteMoreColorsText}}</ui5-button>
2424
</div>
2525
{{/if}}
26+
27+
{{#if showRecentColors}}
28+
<div class="ui5-cp-separator"></div>
29+
<div class="ui5-cp-recent-colors-wrapper">
30+
{{#each recentColors}}
31+
<ui5-color-palette-item value="{{this}}"></ui5-color-palette-item>
32+
{{/each}}
33+
</div>
34+
{{/if}}
2635
</div>

packages/main/src/ColorPalette.js

+29-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ const metadata = {
2828
tag: "ui5-color-palette",
2929
managedSlots: true,
3030
properties: /** @lends sap.ui.webcomponents.main.ColorPalette.prototype */ {
31+
32+
/**
33+
* Defines whether the user can see the last used colors in the bottom of the <code>ui5-color-palette</code>
34+
* @type {boolean}
35+
* @public
36+
* @since 1.0.0-rc.15
37+
*/
38+
showRecentColors: {
39+
type: Boolean,
40+
},
41+
3142
/**
3243
* Defines whether the user can choose a custom color from a color picker
3344
* <b>Note:</b> In order to use this property you need to import the following module: <code>"@ui5/webcomponents/dist/features/ColorPaletteMoreColors.js"</code>
@@ -47,7 +58,7 @@ const metadata = {
4758
*/
4859
value: {
4960
type: CSSColor,
50-
},
61+
},
5162
},
5263
slots: /** @lends sap.ui.webcomponents.main.ColorPalette.prototype */ {
5364
/**
@@ -147,6 +158,8 @@ class ColorPalette extends UI5Element {
147158
rowSize: 5,
148159
behavior: ItemNavigationBehavior.Cyclic,
149160
});
161+
162+
this._recentColors = [];
150163
}
151164

152165
onBeforeRendering() {
@@ -173,6 +186,9 @@ class ColorPalette extends UI5Element {
173186

174187
_setColor(color) {
175188
this.value = color;
189+
if (this._recentColors[0] !== this.value) {
190+
this._recentColors.unshift(this.value);
191+
}
176192

177193
this.fireEvent("change", {
178194
color: this.value,
@@ -230,6 +246,18 @@ class ColorPalette extends UI5Element {
230246
return this.moreColors && this.moreColorsFeature;
231247
}
232248

249+
get recentColors() {
250+
if (this._recentColors.length > 5) {
251+
this._recentColors = this._recentColors.slice(0, 5);
252+
}
253+
254+
while (this._recentColors.length < 5) {
255+
this._recentColors.push("");
256+
}
257+
258+
return this._recentColors;
259+
}
260+
233261
async _getDialog() {
234262
const staticAreaItem = await this.getStaticAreaItemDomRef();
235263
return staticAreaItem.querySelector("[ui5-dialog]");

packages/main/src/themes/ColorPalette.css

+5
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,8 @@
2525
text-align: center;
2626
border: none;
2727
}
28+
29+
.ui5-cp-more-colors-wrapper {
30+
display: flex;
31+
flex-direction: column;
32+
}

packages/main/test/pages/ColorPalette.html

+16-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
<br/>
9595
<br/>
9696

97-
<ui5-color-palette id="cp3" more-colors>
97+
<ui5-color-palette id="cp3" more-colors show-recent-colors>
9898
<ui5-color-palette-item value="darkblue"></ui5-color-palette-item>
9999
<ui5-color-palette-item value="pink"></ui5-color-palette-item>
100100
<ui5-color-palette-item value="#444444"></ui5-color-palette-item>
@@ -109,6 +109,21 @@
109109
<ui5-color-palette-item value="#ff6699"></ui5-color-palette-item>
110110
</ui5-color-palette>
111111

112+
<ui5-color-palette id="cp4" more-colors show-recent-colors>
113+
<ui5-color-palette-item value="pink"></ui5-color-palette-item>
114+
<ui5-color-palette-item value="darkblue"></ui5-color-palette-item>
115+
<ui5-color-palette-item value="#444444"></ui5-color-palette-item>
116+
<ui5-color-palette-item value="rgb(0,200,0)"></ui5-color-palette-item>
117+
<ui5-color-palette-item value="green"></ui5-color-palette-item>
118+
<ui5-color-palette-item value="darkred"></ui5-color-palette-item>
119+
<ui5-color-palette-item value="yellow"></ui5-color-palette-item>
120+
<ui5-color-palette-item value="blue"></ui5-color-palette-item>
121+
<ui5-color-palette-item value="cyan"></ui5-color-palette-item>
122+
<ui5-color-palette-item value="orange"></ui5-color-palette-item>
123+
<ui5-color-palette-item value="#5480e7"></ui5-color-palette-item>
124+
<ui5-color-palette-item value="#ff6699"></ui5-color-palette-item>
125+
</ui5-color-palette>
126+
112127
<script>
113128
cp1.addEventListener("change", function(event) {
114129
changeResult.value = event.detail.color;

packages/main/test/samples/ColorPalette.sample.html

+38-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,43 @@ <h2 class="control-header">ColorPalette</h2>
77
<div class="control-tag">&lt;ui5-color-palette&gt;</div>
88

99
<section>
10-
<h3>ColorPalette</h3>
10+
<h3>ColorPalette With More Colors & Recent Colours Functionality</h3>
11+
<div class="snippet">
12+
<ui5-color-palette show-more show-recent-colors>
13+
<ui5-color-palette-item value="darkblue"></ui5-color-palette-item>
14+
<ui5-color-palette-item value="pink"></ui5-color-palette-item>
15+
<ui5-color-palette-item value="#444444"></ui5-color-palette-item>
16+
<ui5-color-palette-item value="rgb(0,200,0)"></ui5-color-palette-item>
17+
<ui5-color-palette-item value="green"></ui5-color-palette-item>
18+
<ui5-color-palette-item value="darkred"></ui5-color-palette-item>
19+
<ui5-color-palette-item value="yellow"></ui5-color-palette-item>
20+
<ui5-color-palette-item value="blue"></ui5-color-palette-item>
21+
<ui5-color-palette-item value="cyan"></ui5-color-palette-item>
22+
<ui5-color-palette-item value="orange"></ui5-color-palette-item>
23+
<ui5-color-palette-item value="#5480e7"></ui5-color-palette-item>
24+
<ui5-color-palette-item value="#ff6699"></ui5-color-palette-item>
25+
</ui5-color-palette>
26+
</div>
27+
<pre class="prettyprint lang-html"><xmp>
28+
<ui5-color-palette show-more show-recent-colors>
29+
<ui5-color-palette-item value="darkblue"></ui5-color-palette-item>
30+
<ui5-color-palette-item value="pink"></ui5-color-palette-item>
31+
<ui5-color-palette-item value="#444444"></ui5-color-palette-item>
32+
<ui5-color-palette-item value="rgb(0,200,0)"></ui5-color-palette-item>
33+
<ui5-color-palette-item value="green"></ui5-color-palette-item>
34+
<ui5-color-palette-item value="darkred"></ui5-color-palette-item>
35+
<ui5-color-palette-item value="yellow"></ui5-color-palette-item>
36+
<ui5-color-palette-item value="blue"></ui5-color-palette-item>
37+
<ui5-color-palette-item value="cyan"></ui5-color-palette-item>
38+
<ui5-color-palette-item value="orange"></ui5-color-palette-item>
39+
<ui5-color-palette-item value="#5480e7"></ui5-color-palette-item>
40+
<ui5-color-palette-item value="#ff6699"></ui5-color-palette-item>
41+
</ui5-color-palette>
42+
</xmp></pre>
43+
</section>
44+
45+
<section>
46+
<h3>Basic ColorPalette</h3>
1147
<div class="snippet">
1248
<ui5-color-palette>
1349
<ui5-color-palette-item value="darkblue"></ui5-color-palette-item>
@@ -41,6 +77,7 @@ <h3>ColorPalette</h3>
4177
</ui5-color-palette>
4278
</xmp></pre>
4379
</section>
80+
4481
<section>
4582
<h3>ColorPalette in Popover</h3>
4683
<div class="snippet">

packages/main/test/specs/ColorPalette.spec.js

+21
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,25 @@ describe("ColorPalette interactions", () => {
9898

9999
assert.strictEqual(colorPalette.getProperty("value"), "#fafafa", "Custom color is selected from the color picker");
100100
})
101+
102+
it("Tests show-recent-colors functionality", () => {
103+
const colorPalette = browser.$("#cp4");
104+
const colorPaletteEntries = colorPalette.$$("[ui5-color-palette-item]");
105+
106+
const colorPaletteRecentColorsWrapper = colorPalette.shadow$(".ui5-cp-recent-colors-wrapper");
107+
const colorPaletteRecentColorsWrapperEntries = colorPaletteRecentColorsWrapper.$$("[ui5-color-palette-item]");
108+
109+
colorPaletteEntries[0].click();
110+
colorPaletteEntries[1].click();
111+
colorPaletteEntries[2].click();
112+
colorPaletteEntries[3].click();
113+
colorPaletteEntries[4].click();
114+
115+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries.length, 5, "Only the latest 5 colors are shown");
116+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries[0].getProperty("value"), "green");
117+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries[1].getProperty("value"), "rgb(0,200,0)");
118+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries[2].getProperty("value"), "#444444");
119+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries[3].getProperty("value"), "darkblue");
120+
assert.strictEqual(colorPaletteRecentColorsWrapperEntries[4].getProperty("value"), "pink");
121+
});
101122
});

0 commit comments

Comments
 (0)