From d698c8d616ac825ce77bc2d89746db86f6227359 Mon Sep 17 00:00:00 2001 From: Ruslan Hrynchuk Date: Thu, 10 Aug 2023 13:54:07 +0300 Subject: [PATCH] Stateful object. Tests passed. --- checklist.md | 2 +- package.json | 2 +- src/transformState.js | 30 +++++++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/checklist.md b/checklist.md index e3ec5a57f..eef84d0b0 100644 --- a/checklist.md +++ b/checklist.md @@ -8,7 +8,7 @@ for (let item of actions) { ``` -GOOD EXAMPLE: +GOOD EXAMPLE: ``` for (const action of actions) { ``` diff --git a/package.json b/package.json index e83fa6dc7..55e4ae2de 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "license": "GPL-3.0", "devDependencies": { "@mate-academy/eslint-config": "*", - "@mate-academy/scripts": "^0.3.5", + "@mate-academy/scripts": "^1.2.8", "eslint": "^5.16.0", "eslint-plugin-jest": "^22.4.1", "eslint-plugin-node": "^8.0.1", diff --git a/src/transformState.js b/src/transformState.js index a1eaa0640..58c2caff4 100644 --- a/src/transformState.js +++ b/src/transformState.js @@ -5,7 +5,35 @@ * @param {Object[]} actions */ function transformState(state, actions) { - // write code here + for (const action of actions) { + switch (action.type) { + case ('addProperties'): + Object.assign(state, action.extraData); + + break; + + case ('removeProperties'): + for (const keyToRemove of action.keysToRemove) { + if (state.hasOwnProperty(keyToRemove)) { + delete state[keyToRemove]; + } + } + + break; + + case ('clear'): + for (const stateKey in state) { + delete state[stateKey]; + } + + break; + + default: + return 'ERROR'; + } + } + + return state; } module.exports = transformState;