Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 44 additions & 18 deletions src/components/GameMove/GameStatus.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,29 @@ function renderGlyph(
return renderglyph(glyph, player, options);
}

// A status value is plain text or a glyph (`{ glyph, colour }`)
function renderStatusValue(value, id, globalMe, colourContext, game) {
if (typeof value === "string") {
return value;
}
return (
<img
className="playerImage"
src={`data:image/svg+xml;utf8,${encodeURIComponent(
renderGlyph(
value.glyph,
id,
value.colour,
globalMe,
colourContext,
game
)
)}`}
alt={"color " + value.colour}
/>
);
}

function GameStatus({
status,
settings,
Expand Down Expand Up @@ -104,23 +127,12 @@ function GameStatus({
<td>
{status.value.map((v, i) => (
<span key={i}>
{typeof v === "string" ? (
v
) : (
<img
className="playerImage"
src={`data:image/svg+xml;utf8,${encodeURIComponent(
renderGlyph(
v.glyph,
"genericStatus-" + ind + "-" + i,
v.colour,
globalMe,
colourContext,
game
)
)}`}
alt={"color " + v.colour}
/>
{renderStatusValue(
v,
"genericStatus-" + ind + "-" + i,
globalMe,
colourContext,
game
)}
</span>
))}
Expand Down Expand Up @@ -161,7 +173,21 @@ function GameStatus({
allUsers
)}
</td>
<td>{score}</td>
<td>
{Array.isArray(score)
? score.map((v, j) => (
<span key={j}>
{renderStatusValue(
v,
"score-" + i + "-" + index + "-" + j,
globalMe,
colourContext,
game
)}
</span>
))
: score}
</td>
</tr>
))}
</tbody>
Expand Down
62 changes: 44 additions & 18 deletions src/components/Lab/GameStatus.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,29 @@ function renderGlyph(
return renderglyph(glyph, player, options);
}

// A status value is plain text or a glyph (`{ glyph, colour }`)
function renderStatusValue(value, id, globalMe, colourContext, game) {
if (typeof value === "string") {
return value;
}
return (
<img
className="playerImage"
src={`data:image/svg+xml;utf8,${encodeURIComponent(
renderGlyph(
value.glyph,
id,
value.colour,
globalMe,
colourContext,
game
)
)}`}
alt={"color " + value.colour}
/>
);
}

function GameStatus({
status,
settings,
Expand Down Expand Up @@ -104,23 +127,12 @@ function GameStatus({
<td>
{status.value.map((v, i) => (
<span key={i}>
{typeof v === "string" ? (
v
) : (
<img
className="playerImage"
src={`data:image/svg+xml;utf8,${encodeURIComponent(
renderGlyph(
v.glyph,
"genericStatus-" + ind + "-" + i,
v.colour,
globalMe,
colourContext,
game
)
)}`}
alt={"color " + v.colour}
/>
{renderStatusValue(
v,
"genericStatus-" + ind + "-" + i,
globalMe,
colourContext,
game
)}
</span>
))}
Expand Down Expand Up @@ -161,7 +173,21 @@ function GameStatus({
allUsers
)}
</td>
<td>{score}</td>
<td>
{Array.isArray(score)
? score.map((v, j) => (
<span key={j}>
{renderStatusValue(
v,
"score-" + i + "-" + index + "-" + j,
globalMe,
colourContext,
game
)}
</span>
))
: score}
</td>
</tr>
))}
</tbody>
Expand Down
19 changes: 12 additions & 7 deletions src/lib/resolveSidebarStatus.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ function resolveStatusField(label, playerNames, t) {
return resolveRenderLabel(label, playerNames, t);
}

function resolveStatusValue(entry, playerNames, t) {
if (isGlyph(entry)) {
return entry;
}
return resolveStatusField(entry, playerNames, t);
}

export function resolveSidebarStatuses(
statuses,
players,
Expand All @@ -34,12 +41,7 @@ export function resolveSidebarStatuses(
return statuses.map((row) => ({
...row,
key: resolveStatusField(row.key, playerNames, t),
value: row.value.map((entry) => {
if (isGlyph(entry)) {
return entry;
}
return resolveStatusField(entry, playerNames, t);
}),
value: row.value.map((entry) => resolveStatusValue(entry, playerNames, t)),
}));
}

Expand All @@ -56,8 +58,11 @@ export function resolveSidebarScores(
return scores.map((block) => ({
...block,
name: resolveStatusField(block.name, playerNames, t),
// A player's score may be a row of status values (text or glyphs)
scores: block.scores.map((entry) =>
resolveStatusField(entry, playerNames, t)
Array.isArray(entry)
? entry.map((value) => resolveStatusValue(value, playerNames, t))
: resolveStatusField(entry, playerNames, t)
),
}));
}
25 changes: 25 additions & 0 deletions src/lib/resolveSidebarStatus.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,29 @@ describe("resolveSidebarStatus", () => {
expect(resolved[0].name).to.equal("Scores");
expect(resolved[0].scores).to.deep.equal([10, 20]);
});

it("resolves list score cells entry by entry, leaving glyphs unchanged", () => {
const glyph = { glyph: "piece", colour: 3 };
const scores = [
{
name: "Colours",
scores: [
[
glyph,
{
textKey: "apgames:status._player",
actor: { kind: "seat", seat: 2 },
},
],
[],
],
spoiler: true,
},
];
const resolved = resolveSidebarScores(scores, players, users, t);
expect(resolved[0].scores[0][0]).to.equal(glyph);
expect(resolved[0].scores[0][1]).to.equal("Bob");
expect(resolved[0].scores[1]).to.deep.equal([]);
expect(resolved[0].spoiler).to.equal(true);
});
});