From dcf40e21505836038a1de9a942a1da3650815144 Mon Sep 17 00:00:00 2001 From: Jacob Peterson Date: Tue, 23 Nov 2021 11:48:56 -0500 Subject: [PATCH 1/8] changes trigger modal id inputs to dropdowns --- .../__snapshots__/more-info-box.test.js.snap | 30 +-- .../trigger-list-modal.test.js.snap | 12 +- .../triggers/trigger-list-modal.test.js | 222 ++++++++++++++++-- .../components/navigation/more-info-box.js | 11 +- .../components/node/editor-component.js | 2 + .../components/triggers/trigger-list-modal.js | 175 ++++++++++++-- .../oboeditor/components/visual-editor.js | 3 + 7 files changed, 385 insertions(+), 70 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/more-info-box.test.js.snap b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/more-info-box.test.js.snap index c2dfb46d89..6877c7f814 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/more-info-box.test.js.snap +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/more-info-box.test.js.snap @@ -1,26 +1,26 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`MoreInfoBox More Info Box changes to open 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box changes to open 1`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box edits values 1`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box edits values 1`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; -exports[`MoreInfoBox More Info Box edits values 2`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box edits values 2`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; -exports[`MoreInfoBox More Info Box edits values 3`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box edits values 3`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; -exports[`MoreInfoBox More Info Box edits values 4`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box edits values 4`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; -exports[`MoreInfoBox More Info Box edits values 5`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box edits values 5`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; exports[`MoreInfoBox More Info Box edits values 6`] = `"
"`; -exports[`MoreInfoBox More Info Box for assessment 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box for assessment 1`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box for assessment 2`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box for assessment 2`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box input with explicit and default placeholders 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box input with explicit and default placeholders 1`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box prevents tab escape 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box prevents tab escape 1`] = `"
Triggers:
"`; exports[`MoreInfoBox More Info Box renders properly 1`] = `
`; -exports[`MoreInfoBox More Info Box tries to save with error 1`] = `"
Triggers:

A simple Error

"`; +exports[`MoreInfoBox More Info Box tries to save with error 1`] = `"
Triggers:

A simple Error

"`; -exports[`MoreInfoBox More Info Box with contentDescriptions 1`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; +exports[`MoreInfoBox More Info Box with contentDescriptions 1`] = `"
Mock Toggle
Mock Abstract Toggle
Triggers:
"`; -exports[`MoreInfoBox More Info Box with no button bar 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box with no button bar 1`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box with no move buttons 1`] = `"
Triggers:
"`; +exports[`MoreInfoBox More Info Box with no move buttons 1`] = `"
Triggers:
"`; -exports[`MoreInfoBox More Info Box with triggers 1`] = `"
Triggers:mockTrigger, mockSecondTrigger
"`; +exports[`MoreInfoBox More Info Box with triggers 1`] = `"
Triggers:mockTrigger, mockSecondTrigger
"`; diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/__snapshots__/trigger-list-modal.test.js.snap b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/__snapshots__/trigger-list-modal.test.js.snap index b958697529..13014c1924 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/__snapshots__/trigger-list-modal.test.js.snap +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/__snapshots__/trigger-list-modal.test.js.snap @@ -1,14 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`TriggerListModal adds a trigger 1`] = `"

Triggers

"`; +exports[`TriggerListModal adds a trigger 1`] = `"

Triggers

"`; -exports[`TriggerListModal adds an action 1`] = `"

Triggers

"`; +exports[`TriggerListModal adds an action 1`] = `"

Triggers

"`; exports[`TriggerListModal changes action type 1`] = `"

Triggers

"`; -exports[`TriggerListModal changes action value 1`] = `"

Triggers

"`; +exports[`TriggerListModal changes action value 1`] = `"

Triggers

"`; -exports[`TriggerListModal changes trigger 1`] = `"

Triggers

"`; +exports[`TriggerListModal changes trigger 1`] = `"

Triggers

"`; exports[`TriggerListModal createNewDefaultActionValueObject(assessment:endAttempt) creates a new default action value object 1`] = ` Object { @@ -74,6 +74,8 @@ exports[`TriggerListModal deletes an action 1`] = `"

Triggers

"`; -exports[`TriggerListModal renders all options 1`] = `"

Triggers

Animate Scroll
Fade Out Other Items
"`; +exports[`TriggerListModal renders actions with id select boxes 1`] = `"

Triggers

Fade Out Other Items
"`; + +exports[`TriggerListModal renders all options 1`] = `"

Triggers

Animate Scroll
Fade Out Other Items
"`; exports[`TriggerListModal renders if given no triggers 1`] = `"

Triggers

"`; diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js index 0c83193044..f69cac718c 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js @@ -23,7 +23,37 @@ describe('TriggerListModal', () => { } ] } - const component = shallow() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const elements = [{ id: 3, type: 'mockType' }, { id: 4, type: 'mockType' }] + const component = shallow( + + ) + const tree = component.html() + expect(tree).toMatchSnapshot() + }) + + test('renders actions with id select boxes', () => { + const content = { + triggers: [ + { + type: 'onMount', + actions: [ + { type: 'nav:goto', value: { id: '' } }, + { type: 'assessment:startAttempt', value: { id: '' } }, + { type: 'assessment:endAttempt', value: { id: '' } }, + { type: 'focus:component', value: { id: '' } } + ] + } + ] + } + const navItems = [ + { id: 1, type: 'mockType', flags: {} }, + { id: 2, type: 'mockType', flags: { assessment: true } } + ] + const elements = [{ id: 3, type: 'mockType' }, { id: 4, type: 'mockType' }] + const component = shallow( + + ) const tree = component.html() expect(tree).toMatchSnapshot() }) @@ -47,7 +77,8 @@ describe('TriggerListModal', () => { } ] } - const component = shallow() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = shallow() component .find('button') @@ -71,7 +102,8 @@ describe('TriggerListModal', () => { } ] } - const component = shallow() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = shallow() component .find('button') @@ -87,7 +119,7 @@ describe('TriggerListModal', () => { triggers: [ { type: 'onMount', - actions: [{ type: 'nav:goto', value: {} }] + actions: [{ type: 'nav:goto', value: { id: '' } }] }, { type: 'onUnmount', @@ -95,7 +127,8 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const navItems = [{ id: 1, type: 'link' }, { id: 2, type: 'link' }] + const component = mount() component .find('button') @@ -119,7 +152,8 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = mount() component .find('button') @@ -143,8 +177,11 @@ describe('TriggerListModal', () => { } ] } + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] const close = jest.fn() - const component = mount() + const component = mount( + + ) component .find('button') @@ -164,7 +201,7 @@ describe('TriggerListModal', () => { expect(close).toHaveBeenCalledWith() }) - test('unounts when there is no close prop', () => { + test('unmounts when there is no close prop', () => { const content = { triggers: [] } const component = mount() @@ -186,7 +223,8 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = mount() component .find('select') @@ -212,7 +250,8 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = mount() component .find('select') @@ -238,31 +277,32 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const navItems = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = mount() // make sure this is the expected label/input combo const inputLabel = component.find('label').at(2) - expect(inputLabel.props().children).toBe('Item Id') + expect(inputLabel.props().children).toBe('Page') // change the value component - .find('input') + .find('select') .at(2) - .simulate('change', { target: { type: 'text', value: '10' } }) + .simulate('change', { target: { type: 'select-one', value: 2 } }) // check that the value changed expect( component - .find('input') + .find('select') .at(2) .props() - ).toHaveProperty('value', '10') + ).toHaveProperty('value', 2) // check the change to state expect(component.state()).toHaveProperty('triggers') expect(component.state().triggers[0].actions).toContainEqual({ type: 'nav:goto', - value: { id: '10' } + value: { id: 2 } }) // check the rendered component @@ -286,11 +326,12 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const elements = [{ id: 1, type: 'mockType' }, { id: 2, type: 'mockType' }] + const component = mount() component .find('select') - .at(2) + .at(3) .simulate('change', { target: { value: 'animateScroll' } }) @@ -299,7 +340,7 @@ describe('TriggerListModal', () => { component .find('select') - .at(2) + .at(3) .simulate('change', { target: { value: 'preventScroll' } }) @@ -308,7 +349,7 @@ describe('TriggerListModal', () => { component .find('select') - .at(2) + .at(3) .simulate('change', { target: { value: 'jumpScroll' } }) @@ -329,7 +370,8 @@ describe('TriggerListModal', () => { } ] } - const component = mount() + const elements = [{ id: 1 }, { id: 2 }] + const component = mount() const input = component.find(Switch).find('input') input.simulate('change', { target: { type: 'checkbox', checked: true } }) expect(component.state().triggers[0].actions[0].value).toHaveProperty('fade', true) @@ -379,4 +421,140 @@ describe('TriggerListModal', () => { expect(TriggerListModal.prototype.createNewDefaultActionValueObject(type)).toMatchSnapshot() } ) + + test('createNewDefaultActionValueObject selects assessment by id for start/end attempt triggers', () => { + const content = { + triggers: [ + { + type: 'onMount', + actions: [{ type: 'assessment:startAttempt', value: { id: 2 } }] + } + ] + } + const navItems = [ + { id: 1, type: 'mockType', flags: {} }, + { id: 2, type: 'mockType', flags: { assessment: true } } + ] + const component = mount() + + expect( + component.instance().createNewDefaultActionValueObject('assessment:startAttempt') + ).toEqual({ id: 2 }) + expect(component.instance().createNewDefaultActionValueObject('assessment:endAttempt')).toEqual( + { id: 2 } + ) + }) + + test('getElementText returns expected values', () => { + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Text', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('TEXT: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Text', + content: { textGroup: [{ text: { value: 'very long mock text that is very long' } }] } + }) + ).toBe('TEXT: very long mock text that is very l...') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Heading', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('HEADING: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Figure', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('FIGURE: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.ActionButton', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('BUTTON: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.List', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('LIST: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Table', + content: { textGroup: { textGroup: [{ text: { value: 'mock text' } }] } } + }) + ).toBe('TABLE: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Break' + }) + ).toBe('BREAK') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.MathEquation', + content: { latex: 'mock latex' } + }) + ).toBe('MATH: mock latex') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Code', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('CODE: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.YouTube' + }) + ).toBe('YouTube Video') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.IFrame', + content: { title: 'mock title' } + }) + ).toBe('IFRAME: mock title') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.IFrame', + content: { src: 'mock source' } + }) + ).toBe('IFRAME: mock source') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.IFrame', + content: {} + }) + ).toBe('IFRAME: No source!') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Question', + children: [ + { + content: { textGroup: [{ text: { value: 'mock text' } }] } + } + ] + }) + ).toBe('QUESTION: mock text') + + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.QuestionBank', + content: { textGroup: [{ text: { value: 'mock text' } }] } + }) + ).toBe('QUESTION BANK') + }) }) diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/more-info-box.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/more-info-box.js index 0d7b222d42..586ae979fc 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/more-info-box.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/more-info-box.js @@ -175,7 +175,14 @@ class MoreInfoBox extends React.Component { showTriggersModal() { // Prevent info box from closing when modal is opened - ModalUtil.show() + ModalUtil.show( + + ) this.setState({ modalOpen: true }) } @@ -303,7 +310,7 @@ class MoreInfoBox extends React.Component {
{this.props.contentDescription.map(description => this.renderItem(description))} -
+
Triggers: {triggers && triggers.length > 0 ? ( diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/node/editor-component.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/node/editor-component.js index 8d95aaf741..f39a5f606a 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/node/editor-component.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/node/editor-component.js @@ -219,6 +219,8 @@ class Node extends React.Component { showMoveButtons isFirst={thisSiblingIndex === 0} isLast={thisSiblingIndex >= siblingCount - 1} + elements={this.props.editor.children} + navItems={this.props.navItems} /> ) } diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js index 11738f0ce0..a4aff206aa 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js @@ -49,7 +49,7 @@ class TriggerListModal extends React.Component { actions: [ { type: 'nav:goto', - value: {} + value: { id: '' } } ] }) @@ -57,12 +57,18 @@ class TriggerListModal extends React.Component { } createNewDefaultActionValueObject(type) { + const props = this.props || {} + switch (type) { case 'nav:goto': + return { + id: '' + } + case 'assessment:startAttempt': case 'assessment:endAttempt': return { - id: '' + id: props.navItems ? props.navItems.slice(-1)[0].id : '' } case 'nav:openExternalLink': @@ -218,19 +224,99 @@ class TriggerListModal extends React.Component { })) } + getElementText(element) { + let text = '' + + switch (element.type) { + case 'ObojoboDraft.Chunks.Text': + text = 'TEXT: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.Heading': + text = 'HEADING: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.Figure': + text = 'FIGURE: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.ActionButton': + text = 'BUTTON: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.List': + text = 'LIST: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.Table': + text = 'TABLE: ' + element.content.textGroup.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.Break': + text = 'BREAK' + break + case 'ObojoboDraft.Chunks.MathEquation': + text = 'MATH: ' + element.content.latex + break + case 'ObojoboDraft.Chunks.Code': + text = 'CODE: ' + element.content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.YouTube': + text = 'YouTube Video' + break + case 'ObojoboDraft.Chunks.IFrame': + text = 'IFRAME: ' + (element.content.title || element.content.src || 'No source!') + break + case 'ObojoboDraft.Chunks.Question': + text = 'QUESTION: ' + element.children[0].content.textGroup[0].text.value + break + case 'ObojoboDraft.Chunks.QuestionBank': + text = 'QUESTION BANK' + break + default: + text = element.type + } + + if (text.length > 40) { + text = text.slice(0, 40).trim() + '...' + } + + return text + } + + isValidId(id, elements) { + if (id === '') return true + + return !!elements.find(el => el.id === id) + } + renderActionOptions(triggerIndex, actionIndex, action) { switch (action.type) { case 'nav:goto': return (
-
- - -
+ {this.isValidId(action.value.id, this.props.navItems) ? ( +
+ + +
+ ) : ( +
+ + +
+ )}
) case 'nav:openExternalLink': @@ -250,14 +336,33 @@ class TriggerListModal extends React.Component { case 'assessment:endAttempt': return (
-
- - -
+ {this.isValidId(action.value.id, this.props.navItems) ? ( +
+ + +
+ ) : ( +
+ + +
+ )}
) case 'viewer:alert': @@ -299,14 +404,32 @@ class TriggerListModal extends React.Component { case 'focus:component': return (
-
- - -
+ {this.isValidId(action.value.id, this.props.elements) ? ( +
+ + +
+ ) : ( +
+ + +
+ )} Date: Thu, 2 Dec 2021 12:57:19 -0500 Subject: [PATCH 2/8] =?UTF-8?q?resolves=20errors=20with=20trigger=20modal?= =?UTF-8?q?=20in=20buttons=20and=20nav=20pages=20=E2=98=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__snapshots__/sub-menu.test.js.snap | 25 +++++++++++++++++-- .../oboeditor/components/navigation/header.js | 2 ++ .../components/navigation/sub-menu.js | 2 ++ .../oboeditor/components/visual-editor.js | 1 - .../editor-component.js | 7 +++++- 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/sub-menu.test.js.snap b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/sub-menu.test.js.snap index 0de5892c23..ef5e89a144 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/sub-menu.test.js.snap +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/sub-menu.test.js.snap @@ -30,7 +30,18 @@ exports[`SubMenu SubMenu component adds page 1`] = ` } ], \\"showMoveButtons\\": true, - \\"isAssessment\\": false + \\"isAssessment\\": false, + \\"navItems\\": [ + { + \\"id\\": 5, + \\"type\\": \\"link\\", + \\"label\\": \\"label5\\", + \\"contentType\\": \\"Page\\", + \\"flags\\": { + \\"assessment\\": false + } + } + ] }
" `; @@ -92,7 +103,17 @@ exports[`SubMenu SubMenu component selected as assessment 1`] = ` } ], "showMoveButtons": false, - "isAssessment": true + "isAssessment": true, + "navItems": [ + { + "id": 6, + "type": "link", + "label": "label6", + "flags": { + "assessment": true + } + } + ] }
diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/header.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/header.js index acd532a263..e0eb15e2c1 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/header.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/header.js @@ -104,6 +104,8 @@ class Header extends React.Component { savePage={this.props.savePage} contentDescription={contentDescription} markUnsaved={this.props.markUnsaved} + elements={this.props.list[this.props.index].children} + navItems={this.props.list} hideButtonBar /> diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js index c0648ed80f..06797ea271 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js @@ -261,6 +261,8 @@ class SubMenu extends React.Component { moveNode={this.movePage} showMoveButtons={!item.flags.assessment} isAssessment={item.flags.assessment} + elements={this.props.list[this.props.index].children} + navItems={this.props.list} /> ) } diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/visual-editor.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/visual-editor.js index 44c674f539..1b87c34fd5 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/visual-editor.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/visual-editor.js @@ -586,7 +586,6 @@ class VisualEditor extends React.Component { + ) } From af95cba1038904baf6d2bc00a69c706e570d1ec7 Mon Sep 17 00:00:00 2001 From: Jacob Peterson Date: Thu, 3 Feb 2022 13:28:49 -0500 Subject: [PATCH 3/8] fixed an error with buttons and adding triggers to nav items --- .../components/navigation/editor-nav.test.js | 63 +++++++++++++++++-- .../components/navigation/editor-nav.js | 20 +++++- .../oboeditor/components/navigation/header.js | 2 +- .../components/navigation/sub-menu.js | 2 +- .../editor-component.js | 2 +- .../editor-component.test.js | 5 +- 6 files changed, 83 insertions(+), 11 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js index 95c76a14f9..5f837fbd8c 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js @@ -39,7 +39,12 @@ describe('EditorNav', () => { test('EditorNav component', () => { EditorUtil.getOrderedList.mockReturnValueOnce([]) const props = { - navState: {} + navState: {}, + model: { + attributes: { + content: {} + } + } } const component = renderer.create() const tree = component.toJSON() @@ -49,7 +54,12 @@ describe('EditorNav', () => { test('EditorNav component adds page', () => { EditorUtil.getOrderedList.mockReturnValueOnce([]) const props = { - navState: {} + navState: {}, + model: { + attributes: { + content: {} + } + } } const component = mount() @@ -65,7 +75,12 @@ describe('EditorNav', () => { test('EditorNav component adds assessment', () => { EditorUtil.getOrderedList.mockReturnValueOnce([]) const props = { - navState: {} + navState: {}, + model: { + attributes: { + content: {} + } + } } const component = mount() @@ -118,6 +133,19 @@ describe('EditorNav', () => { open: false, locked: true, navTargetId: 56 // select this item + }, + model: { + attributes: { + content: { start: null }, + children: [ + { + children: [{ children: [] }, { children: [] }] + }, + { + children: [{ children: [] }, { children: [] }] + } + ] + } } } const component = renderer.create() @@ -139,7 +167,20 @@ describe('EditorNav', () => { ]) .mockReturnValueOnce([]) - const props = { navState: {} } + const props = { + navState: {}, + model: { + attributes: { + content: {}, + children: [ + {}, + { + children: [{ children: [{ children: [] }] }, { children: [{ children: [] }] }] + } + ] + } + } + } const component = mount() component.instance().onNavItemClick({ @@ -157,7 +198,12 @@ describe('EditorNav', () => { test('addAssessment hides the modal and calls EditorUtil', () => { EditorUtil.getOrderedList.mockReturnValue([]) const props = { - navState: {} + navState: {}, + model: { + attributes: { + content: {} + } + } } const component = mount() @@ -177,7 +223,12 @@ describe('EditorNav', () => { test('addPage hides the modal and calls EditorUtil', () => { EditorUtil.getOrderedList.mockReturnValue([]) const props = { - navState: {} + navState: {}, + model: { + attributes: { + content: {} + } + } } const component = mount() diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js index ad6ee74f1a..fc2786e30b 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js @@ -90,19 +90,37 @@ class EditorNav extends React.PureComponent { }) } + const startPage = + this.props.model.attributes.content.start === null + ? 0 + : list.findIndex(el => el.id === this.props.model.attributes.content.start) + return list.map((item, index) => { + let elements + switch (item.type) { case 'heading': return ( -
+
) case 'link': + elements = item.flags.assessment + ? this.props.model.attributes.children[1].children[0].children + : this.props.model.attributes.children[0].children[index - 1].children + return ( diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js index 06797ea271..68bc6ae0ff 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/sub-menu.js @@ -261,7 +261,7 @@ class SubMenu extends React.Component { moveNode={this.movePage} showMoveButtons={!item.flags.assessment} isAssessment={item.flags.assessment} - elements={this.props.list[this.props.index].children} + elements={this.props.elements} navItems={this.props.list} /> ) diff --git a/packages/obonode/obojobo-chunks-action-button/editor-component.js b/packages/obonode/obojobo-chunks-action-button/editor-component.js index 59bf5d7981..a53c16e95c 100644 --- a/packages/obonode/obojobo-chunks-action-button/editor-component.js +++ b/packages/obonode/obojobo-chunks-action-button/editor-component.js @@ -36,7 +36,7 @@ class ActionButton extends React.Component { ) diff --git a/packages/obonode/obojobo-chunks-action-button/editor-component.test.js b/packages/obonode/obojobo-chunks-action-button/editor-component.test.js index 78435a56c1..20be86c522 100644 --- a/packages/obonode/obojobo-chunks-action-button/editor-component.test.js +++ b/packages/obonode/obojobo-chunks-action-button/editor-component.test.js @@ -88,7 +88,10 @@ describe('ActionButton Editor Node', () => { }) test('opens modal', () => { - const component = mount() + const editor = { + children: [nodeData] + } + const component = mount() component .find('button') From 796b3f6053c1f621ce473f97cd8a66e90c4e5e92 Mon Sep 17 00:00:00 2001 From: Jacob Peterson Date: Thu, 3 Feb 2022 14:18:47 -0500 Subject: [PATCH 4/8] fixed bug that prevented creating a new page --- .../oboeditor/components/navigation/editor-nav.test.js | 2 +- .../scripts/oboeditor/components/navigation/editor-nav.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js index 5f837fbd8c..56c5935108 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js @@ -142,7 +142,7 @@ describe('EditorNav', () => { children: [{ children: [] }, { children: [] }] }, { - children: [{ children: [] }, { children: [] }] + children: [] } ] } diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js index fc2786e30b..ba08bfefe1 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js @@ -111,8 +111,8 @@ class EditorNav extends React.PureComponent { ) case 'link': elements = item.flags.assessment - ? this.props.model.attributes.children[1].children[0].children - : this.props.model.attributes.children[0].children[index - 1].children + ? this.props.model.attributes.children[1].children[0] + : this.props.model.attributes.children[0].children[index - 1] return ( Date: Thu, 10 Feb 2022 14:46:25 -0500 Subject: [PATCH 5/8] prevents an error when attempting to edit a newly created module --- .../__snapshots__/editor-nav.test.js.snap | 68 +++++++++++++++++++ .../components/navigation/editor-nav.test.js | 44 ++++++++++++ .../components/navigation/editor-nav.js | 14 ++-- 3 files changed, 121 insertions(+), 5 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/editor-nav.test.js.snap b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/editor-nav.test.js.snap index 9e406718ad..b6a478d32f 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/editor-nav.test.js.snap +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/__snapshots__/editor-nav.test.js.snap @@ -91,6 +91,74 @@ exports[`EditorNav EditorNav component with all list item types 1`] = `
`; +exports[`EditorNav EditorNav component with start page 1`] = ` +
+ + +
+`; + exports[`EditorNav addAssessment hides the modal and calls EditorUtil 1`] = `undefined`; exports[`EditorNav addAssessment hides the modal and calls EditorUtil 2`] = `undefined`; diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js index 56c5935108..aded8ed2f2 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js @@ -153,6 +153,50 @@ describe('EditorNav', () => { expect(tree).toMatchSnapshot() }) + test('EditorNav component with start page', () => { + EditorUtil.getOrderedList.mockReturnValueOnce([ + { + id: 4, + type: 'heading', + label: 'label4', + flags: {} + }, + { + id: 56, + type: 'link', + label: 'label5', + contentType: 'Page', + flags: { + assessment: false + } + } + ]) + + const props = { + navState: { + open: false, + locked: true, + navTargetId: 56 // select this item + }, + model: { + attributes: { + content: { start: 56 }, + children: [ + { + children: [{ children: [] }, { children: [] }] + }, + { + children: [] + } + ] + } + } + } + const component = renderer.create() + const tree = component.toJSON() + expect(tree).toMatchSnapshot() + }) + test('EditorNav component clicks on page item', () => { EditorUtil.getOrderedList .mockReturnValueOnce([ diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js index ba08bfefe1..831594f1fb 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js @@ -90,22 +90,26 @@ class EditorNav extends React.PureComponent { }) } - const startPage = - this.props.model.attributes.content.start === null - ? 0 - : list.findIndex(el => el.id === this.props.model.attributes.content.start) + const startPage = this.props.model.attributes.content.start + ? list.findIndex(el => el.id === this.props.model.attributes.content.start) + : 0 return list.map((item, index) => { let elements switch (item.type) { case 'heading': + elements = + startPage === list.length - 1 + ? this.props.model.attributes.children[1].children[0] + : this.props.model.attributes.children[0].children[startPage] + return (
) From d4096eaff12982a966af1a79fe8bdb45da39a5d9 Mon Sep 17 00:00:00 2001 From: Jacob Peterson Date: Tue, 22 Feb 2022 11:48:05 -0500 Subject: [PATCH 6/8] prevents an error when adding a focus:component action after creating a new node --- .../triggers/trigger-list-modal.test.js | 52 +++++++++++++++++++ .../components/triggers/trigger-list-modal.js | 27 ++++++---- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js index f69cac718c..5b671d74bd 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js @@ -458,6 +458,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'very long mock text that is very long' } }] } }) ).toBe('TEXT: very long mock text that is very l...') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Text', + content: {} + }) + ).toBe('TEXT: new node') expect( TriggerListModal.prototype.getElementText({ @@ -465,6 +471,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'mock text' } }] } }) ).toBe('HEADING: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Heading', + content: {} + }) + ).toBe('HEADING: new node') expect( TriggerListModal.prototype.getElementText({ @@ -472,6 +484,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'mock text' } }] } }) ).toBe('FIGURE: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Figure', + content: {} + }) + ).toBe('FIGURE: new node') expect( TriggerListModal.prototype.getElementText({ @@ -479,6 +497,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'mock text' } }] } }) ).toBe('BUTTON: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.ActionButton', + content: {} + }) + ).toBe('BUTTON: new node') expect( TriggerListModal.prototype.getElementText({ @@ -486,6 +510,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'mock text' } }] } }) ).toBe('LIST: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.List', + content: {} + }) + ).toBe('LIST: new node') expect( TriggerListModal.prototype.getElementText({ @@ -493,6 +523,12 @@ describe('TriggerListModal', () => { content: { textGroup: { textGroup: [{ text: { value: 'mock text' } }] } } }) ).toBe('TABLE: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Table', + content: { textGroup: {} } + }) + ).toBe('TABLE: new node') expect( TriggerListModal.prototype.getElementText({ @@ -513,6 +549,12 @@ describe('TriggerListModal', () => { content: { textGroup: [{ text: { value: 'mock text' } }] } }) ).toBe('CODE: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Code', + content: {} + }) + ).toBe('CODE: new node') expect( TriggerListModal.prototype.getElementText({ @@ -549,6 +591,16 @@ describe('TriggerListModal', () => { ] }) ).toBe('QUESTION: mock text') + expect( + TriggerListModal.prototype.getElementText({ + type: 'ObojoboDraft.Chunks.Question', + children: [ + { + content: {} + } + ] + }) + ).toBe('QUESTION: new node') expect( TriggerListModal.prototype.getElementText({ diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js index a4aff206aa..ccead76aa0 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js @@ -225,44 +225,51 @@ class TriggerListModal extends React.Component { } getElementText(element) { + const content = element.content let text = '' switch (element.type) { case 'ObojoboDraft.Chunks.Text': - text = 'TEXT: ' + element.content.textGroup[0].text.value + text = 'TEXT: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.Heading': - text = 'HEADING: ' + element.content.textGroup[0].text.value + text = 'HEADING: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.Figure': - text = 'FIGURE: ' + element.content.textGroup[0].text.value + text = 'FIGURE: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.ActionButton': - text = 'BUTTON: ' + element.content.textGroup[0].text.value + text = 'BUTTON: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.List': - text = 'LIST: ' + element.content.textGroup[0].text.value + text = 'LIST: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.Table': - text = 'TABLE: ' + element.content.textGroup.textGroup[0].text.value + text = + 'TABLE: ' + + (content.textGroup.textGroup ? content.textGroup.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.Break': text = 'BREAK' break case 'ObojoboDraft.Chunks.MathEquation': - text = 'MATH: ' + element.content.latex + text = 'MATH: ' + content.latex break case 'ObojoboDraft.Chunks.Code': - text = 'CODE: ' + element.content.textGroup[0].text.value + text = 'CODE: ' + (content.textGroup ? content.textGroup[0].text.value : 'new node') break case 'ObojoboDraft.Chunks.YouTube': text = 'YouTube Video' break case 'ObojoboDraft.Chunks.IFrame': - text = 'IFRAME: ' + (element.content.title || element.content.src || 'No source!') + text = 'IFRAME: ' + (content.title || content.src || 'No source!') break case 'ObojoboDraft.Chunks.Question': - text = 'QUESTION: ' + element.children[0].content.textGroup[0].text.value + text = + 'QUESTION: ' + + (element.children[0].content.textGroup + ? element.children[0].content.textGroup[0].text.value + : 'new node') break case 'ObojoboDraft.Chunks.QuestionBank': text = 'QUESTION BANK' From 431ef27df2b619fa65938827a8d52bd0072ae0aa Mon Sep 17 00:00:00 2001 From: Jacob Peterson Date: Mon, 7 Mar 2022 13:22:52 -0500 Subject: [PATCH 7/8] list of elements in trigger modal now updates with new nodes in the nav menu --- .../components/navigation/editor-nav.test.js | 17 ++++++--- .../triggers/trigger-list-modal.test.js | 37 +++++++++++-------- .../components/navigation/editor-nav.js | 29 +++++++-------- .../components/triggers/trigger-list-modal.js | 35 ++++++++++++------ .../oboeditor/components/visual-editor.js | 1 + 5 files changed, 70 insertions(+), 49 deletions(-) diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js index aded8ed2f2..3c37d9870a 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/navigation/editor-nav.test.js @@ -42,7 +42,8 @@ describe('EditorNav', () => { navState: {}, model: { attributes: { - content: {} + content: { start: 'mockId' }, + children: [{ children: [{}] }] } } } @@ -57,7 +58,8 @@ describe('EditorNav', () => { navState: {}, model: { attributes: { - content: {} + content: { start: 'mockId' }, + children: [{ children: [{}] }] } } } @@ -78,7 +80,8 @@ describe('EditorNav', () => { navState: {}, model: { attributes: { - content: {} + content: { start: 'mockId' }, + children: [{ children: [{}] }] } } } @@ -217,7 +220,7 @@ describe('EditorNav', () => { attributes: { content: {}, children: [ - {}, + { children: [{}] }, { children: [{ children: [{ children: [] }] }, { children: [{ children: [] }] }] } @@ -245,7 +248,8 @@ describe('EditorNav', () => { navState: {}, model: { attributes: { - content: {} + content: { start: 'mockId' }, + children: [{ children: [{}] }] } } } @@ -270,7 +274,8 @@ describe('EditorNav', () => { navState: {}, model: { attributes: { - content: {} + content: { start: 'mockId' }, + children: [{ children: [{}] }] } } } diff --git a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js index 5b671d74bd..180c04dcbd 100644 --- a/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js +++ b/packages/app/obojobo-document-engine/__tests__/oboeditor/components/triggers/trigger-list-modal.test.js @@ -461,9 +461,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.Text', - content: {} + content: {}, + children: [{ children: [{ text: 'mock text' }] }] }) - ).toBe('TEXT: new node') + ).toBe('TEXT: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -474,9 +475,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.Heading', - content: {} + content: {}, + children: [{ text: 'mock text' }] }) - ).toBe('HEADING: new node') + ).toBe('HEADING: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -487,9 +489,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.Figure', - content: {} + content: {}, + children: [{ text: 'mock text' }] }) - ).toBe('FIGURE: new node') + ).toBe('FIGURE: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -500,9 +503,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.ActionButton', - content: {} + content: {}, + children: [{ text: 'mock text' }] }) - ).toBe('BUTTON: new node') + ).toBe('BUTTON: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -513,9 +517,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.List', - content: {} + content: {}, + children: [{ children: [{ children: [{ text: 'mock text' }] }] }] }) - ).toBe('LIST: new node') + ).toBe('LIST: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -526,9 +531,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.Table', - content: { textGroup: {} } + content: { textGroup: {} }, + children: [{ children: [{ children: [{ text: 'mock text' }] }] }] }) - ).toBe('TABLE: new node') + ).toBe('TABLE: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -552,9 +558,10 @@ describe('TriggerListModal', () => { expect( TriggerListModal.prototype.getElementText({ type: 'ObojoboDraft.Chunks.Code', - content: {} + content: {}, + children: [{ children: [{ text: 'mock text' }] }] }) - ).toBe('CODE: new node') + ).toBe('CODE: mock text') expect( TriggerListModal.prototype.getElementText({ @@ -600,7 +607,7 @@ describe('TriggerListModal', () => { } ] }) - ).toBe('QUESTION: new node') + ).toBe('QUESTION: [New Question]') expect( TriggerListModal.prototype.getElementText({ diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js index 831594f1fb..08596b7452 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/navigation/editor-nav.js @@ -90,41 +90,38 @@ class EditorNav extends React.PureComponent { }) } - const startPage = this.props.model.attributes.content.start - ? list.findIndex(el => el.id === this.props.model.attributes.content.start) - : 0 + const { attributes } = this.props.model + const startId = attributes.content.start || attributes.children[0].children[0].id + const startPage = + startId === attributes.children[1]?.id + ? attributes.children[1].children[0] + : attributes.children[0].children.find(el => el.id === startId) return list.map((item, index) => { - let elements - switch (item.type) { case 'heading': - elements = - startPage === list.length - 1 - ? this.props.model.attributes.children[1].children[0] - : this.props.model.attributes.children[0].children[startPage] - return (
) case 'link': - elements = item.flags.assessment - ? this.props.model.attributes.children[1].children[0] - : this.props.model.attributes.children[0].children[index - 1] - return ( - {this.isValidId(action.value.id, this.props.elements) ? ( + {this.props.elements && this.isValidId(action.value.id, this.props.elements) ? (

Triggers

"`; -exports[`TriggerListModal adds an action 1`] = `"

Triggers

"`; +exports[`TriggerListModal adds an action 1`] = `"

Triggers

"`; exports[`TriggerListModal changes action type 1`] = `"

Triggers

"`; diff --git a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js index 2f16c7af5b..da1dbe63ad 100644 --- a/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js +++ b/packages/app/obojobo-document-engine/src/scripts/oboeditor/components/triggers/trigger-list-modal.js @@ -173,7 +173,7 @@ class TriggerListModal extends React.Component { ? Object.assign(trigger, { actions: trigger.actions.concat({ type: 'nav:goto', - value: {} + value: { id: '' } }) }) : trigger