|
1 | 1 | const { defineStore } = require( 'pinia' ); |
| 2 | +const { useParsedValueStore } = require( './parsedValueStore.js' ); |
2 | 3 | const { useSavedStatementsStore } = require( './savedStatementsStore.js' ); |
3 | 4 | const { updateStatements } = require( '../api/editEntity.js' ); |
4 | 5 |
|
@@ -38,30 +39,6 @@ const useEditStatementStore = ( statementId ) => defineStore( 'editStatement-' + |
38 | 39 | } |
39 | 40 | } ); |
40 | 41 |
|
41 | | -const buildStatementObjectFromMutableStatement = function ( statementId ) { |
42 | | - const editStatementStore = useEditStatementStore( statementId )(); |
43 | | - const builtData = { |
44 | | - id: statementId, |
45 | | - mainsnak: { |
46 | | - snaktype: editStatementStore.snaktype, |
47 | | - property: editStatementStore.propertyId |
48 | | - }, |
49 | | - references: editStatementStore.references, |
50 | | - 'qualifiers-order': editStatementStore.qualifiersOrder, |
51 | | - qualifiers: editStatementStore.qualifiers, |
52 | | - type: 'statement', |
53 | | - rank: editStatementStore.rank |
54 | | - }; |
55 | | - if ( editStatementStore.snaktype === 'value' ) { |
56 | | - builtData.mainsnak.datavalue = { |
57 | | - value: editStatementStore.value, |
58 | | - type: 'string' |
59 | | - }; |
60 | | - builtData.mainsnak.datatype = 'string'; |
61 | | - } |
62 | | - return builtData; |
63 | | -}; |
64 | | - |
65 | 42 | const useEditStatementsStore = defineStore( 'editStatements', { |
66 | 43 | state: () => ( { |
67 | 44 | statements: [], |
@@ -104,25 +81,62 @@ const useEditStatementsStore = defineStore( 'editStatements', { |
104 | 81 | this.removedStatements.push( removeStatementId ); |
105 | 82 | }, |
106 | 83 |
|
| 84 | + /** |
| 85 | + * @private |
| 86 | + * @param {string} statementId |
| 87 | + * @returns {Promise<object>} |
| 88 | + */ |
| 89 | + async buildStatementObjectFromMutableStatement( statementId ) { |
| 90 | + const parsedValueStore = useParsedValueStore(); |
| 91 | + const editStatementStore = useEditStatementStore( statementId )(); |
| 92 | + const builtData = { |
| 93 | + id: statementId, |
| 94 | + mainsnak: { |
| 95 | + snaktype: editStatementStore.snaktype, |
| 96 | + property: editStatementStore.propertyId |
| 97 | + }, |
| 98 | + references: editStatementStore.references, |
| 99 | + 'qualifiers-order': editStatementStore.qualifiersOrder, |
| 100 | + qualifiers: editStatementStore.qualifiers, |
| 101 | + type: 'statement', |
| 102 | + rank: editStatementStore.rank |
| 103 | + }; |
| 104 | + if ( editStatementStore.snaktype === 'value' ) { |
| 105 | + builtData.mainsnak.datavalue = await parsedValueStore.getParsedValue( |
| 106 | + editStatementStore.propertyId, |
| 107 | + editStatementStore.value |
| 108 | + ); |
| 109 | + builtData.mainsnak.datatype = 'string'; |
| 110 | + } |
| 111 | + return builtData; |
| 112 | + }, |
| 113 | + |
| 114 | + /** |
| 115 | + * @private |
| 116 | + * @returns {Promise<object[]>} |
| 117 | + */ |
| 118 | + async buildStatementsForSerialization() { |
| 119 | + const claimsToDeleteOnSubmit = this.removedStatements |
| 120 | + .filter( ( statementId ) => !this.createdStatements.includes( statementId ) ) |
| 121 | + .map( ( statementId ) => ( { id: statementId, remove: '' } ) ); |
| 122 | + const statements = []; |
| 123 | + for ( const statementId of this.statements ) { |
| 124 | + statements.push( await this.buildStatementObjectFromMutableStatement( statementId ) ); |
| 125 | + } |
| 126 | + return statements.concat( claimsToDeleteOnSubmit ); |
| 127 | + }, |
| 128 | + |
107 | 129 | /** |
108 | 130 | * @param {string} entityId |
109 | 131 | */ |
110 | | - saveChangedStatements( entityId ) { |
| 132 | + async saveChangedStatements( entityId ) { |
111 | 133 | const statementsStore = useSavedStatementsStore(); |
112 | | - return updateStatements( entityId, this.statementsForSerialization ) |
| 134 | + return updateStatements( entityId, await this.buildStatementsForSerialization() ) |
113 | 135 | .then( ( returnedClaims ) => statementsStore.populateWithClaims( returnedClaims, true ) ); |
114 | 136 | } |
115 | 137 | }, |
116 | 138 | getters: { |
117 | | - statementIds: ( state ) => state.statements, |
118 | | - statementsForSerialization( state ) { |
119 | | - const claimsToDeleteOnSubmit = state.removedStatements |
120 | | - .filter( ( statementId ) => !state.createdStatements.includes( statementId ) ) |
121 | | - .map( ( statementId ) => ( { id: statementId, remove: '' } ) ); |
122 | | - return state.statements |
123 | | - .map( ( statementId ) => buildStatementObjectFromMutableStatement( statementId ) ) |
124 | | - .concat( claimsToDeleteOnSubmit ); |
125 | | - } |
| 139 | + statementIds: ( state ) => state.statements |
126 | 140 | } |
127 | 141 | } ); |
128 | 142 |
|
|
0 commit comments