Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: simply from and to in message to string type #5471

Merged
merged 4 commits into from May 1, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -3,7 +3,7 @@
* (c) 2014-2015 Knut Sveidqvist
* MIT license.
*
* Based on js sequence diagrams jison grammr
* Based on js sequence diagrams jison grammer
sidharthv96 marked this conversation as resolved.
Show resolved Hide resolved
* https://bramp.github.io/js-sequence-diagrams/
* (c) 2012-2013 Andrew Brampton (bramp.net)
* Simplified BSD license.
Expand Down
15 changes: 6 additions & 9 deletions packages/mermaid/src/diagrams/sequence/sequenceDb.ts
Expand Up @@ -115,17 +115,16 @@ const activationCount = (part: string) => {
if (!part) {
return 0;
}

for (i = 0; i < state.records.messages.length; i++) {
if (
state.records.messages[i].type === LINETYPE.ACTIVE_START &&
state.records.messages[i].from?.actor === part
state.records.messages[i].from === part
) {
count++;
}
if (
state.records.messages[i].type === LINETYPE.ACTIVE_END &&
state.records.messages[i].from?.actor === part
state.records.messages[i].from === part
) {
count--;
}
Expand Down Expand Up @@ -156,12 +155,10 @@ export const addSignal = function (
activate: boolean = false
) {
if (messageType === LINETYPE.ACTIVE_END) {
const cnt = activationCount(idFrom?.actor || '');
const cnt = activationCount(idFrom || '');
if (cnt < 1) {
// Bail out as there is an activation signal from an inactive participant
const error = new Error(
'Trying to inactivate an inactive participant (' + idFrom?.actor + ')'
);
const error = new Error('Trying to inactivate an inactive participant (' + idFrom + ')');

// @ts-ignore: we are passing hash param to the error object, however we should define our own custom error class to make it type safe
error.hash = {
Expand Down Expand Up @@ -516,10 +513,10 @@ export const apply = function (param: any | AddMessageParams | AddMessageParams[
state.records.destroyedActors[param.actor] = state.records.messages.length;
break;
case 'activeStart':
addSignal(param.actor, undefined, undefined, param.signalType);
addSignal(param.actor.actor, undefined, undefined, param.signalType);
break;
case 'activeEnd':
addSignal(param.actor, undefined, undefined, param.signalType);
addSignal(param.actor.actor, undefined, undefined, param.signalType);
break;
case 'addNote':
addNote(param.actor, param.placement, param.text);
sidharthv96 marked this conversation as resolved.
Show resolved Hide resolved
Expand Down
16 changes: 8 additions & 8 deletions packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js
Expand Up @@ -534,10 +534,10 @@ deactivate Bob`;
expect(messages.length).toBe(4);
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[3].from.actor).toBe('Bob');
expect(messages[3].from).toBe('Bob');
});
it('should handle actor one line notation activation', async () => {
const str = `
Expand All @@ -556,10 +556,10 @@ deactivate Bob`;
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[0].activate).toBeTruthy();
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[3].from.actor).toBe('Bob');
expect(messages[3].from).toBe('Bob');
});
it('should handle stacked activations', async () => {
const str = `
Expand All @@ -579,14 +579,14 @@ deactivate Bob`;
expect(messages.length).toBe(8);
expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[1].from.actor).toBe('Bob');
expect(messages[1].from).toBe('Bob');
expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED);
expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_START);
expect(messages[3].from.actor).toBe('Carol');
expect(messages[3].from).toBe('Carol');
expect(messages[5].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[5].from.actor).toBe('Bob');
expect(messages[5].from).toBe('Bob');
expect(messages[7].type).toBe(diagram.db.LINETYPE.ACTIVE_END);
expect(messages[7].from.actor).toBe('Carol');
expect(messages[7].from).toBe('Carol');
});
it('should handle fail parsing when activating an inactive participant', async () => {
const str = `
Expand Down
18 changes: 9 additions & 9 deletions packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts
Expand Up @@ -144,15 +144,15 @@ export const bounds = {
this.updateBounds(_startx, _starty, _stopx, _stopy);
},
newActivation: function (message, diagram, actors) {
const actorRect = actors[message.from.actor];
const stackedSize = actorActivations(message.from.actor).length || 0;
const actorRect = actors[message.from];
const stackedSize = actorActivations(message.from).length || 0;
const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;
this.activations.push({
startx: x,
starty: this.verticalPos + 2,
stopx: x + conf.activationWidth,
stopy: undefined,
actor: message.from.actor,
actor: message.from,
anchored: svgDraw.anchorElement(diagram),
});
},
Expand All @@ -162,7 +162,7 @@ export const bounds = {
.map(function (activation) {
return activation.actor;
})
.lastIndexOf(message.from.actor);
.lastIndexOf(message.from);
return this.activations.splice(lastActorActivationIdx, 1)[0];
},
createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {
Expand Down Expand Up @@ -836,7 +836,7 @@ export const draw = async function (_text: string, id: string, _version: string,
activationData,
verticalPos,
conf,
actorActivations(msg.from.actor).length
actorActivations(msg.from).length
);

bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);
Expand Down Expand Up @@ -1545,14 +1545,14 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
break;
case diagObj.db.LINETYPE.ACTIVE_START:
{
const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor];
const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;
const actorRect = actors[msg.from ? msg.from : msg.to.actor];
const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length;
const x =
actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;
const toAdd = {
startx: x,
stopx: x + conf.activationWidth,
actor: msg.from.actor,
actor: msg.from,
enabled: true,
};
bounds.activations.push(toAdd);
Expand All @@ -1562,7 +1562,7 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
{
const lastActorActivationIdx = bounds.activations
.map((a) => a.actor)
.lastIndexOf(msg.from.actor);
.lastIndexOf(msg.from);
delete bounds.activations.splice(lastActorActivationIdx, 1)[0];
}
break;
Expand Down
4 changes: 2 additions & 2 deletions packages/mermaid/src/diagrams/sequence/types.ts
Expand Up @@ -20,8 +20,8 @@ export interface Actor {
}

export interface Message {
from?: { actor: string };
to?: { actor: string };
from?: string;
to?: string;
message:
| string
| {
Expand Down