Есть ли способ выбрать, какой объект для возврата на основе его атрибута в Vuex? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть массив объектов с именем Employees, и я пытаюсь получить те, у которых отдел_ид = 3, и я не хочу go вернуться к laravel и сделать еще один запрос, так что есть ли способ сделать это с vuex?

     "id": 25,
    "name": "name",
    "email": "name@gmail.com",
    "last_name": "lastname",
    "phone": "98745632",
    "gender": "Male",
    "nationality": "Tunisian",
    "school": "ISIMM",
    "experience_level": "2",
    "source": "Linkedin",
    "hiring_date": "2020-04-17",
    "end_contract": "2020-04-18",
    "position": "web developer",
    "grade": "Junior",
    "contract": "Cdi",
    "department_id": 1,
    "company_id": 1,
    "archived": "0",
    "img": null,
    "supervisor_id": 1,
    "ipAdress": null,
    "last_login_at": null,
    "department": {
      "id": 1,
      "name": "mobile"
    },

вот состояние:

const employee = {
  state: {
    Employees: [],
    sysAdmins: [],
  },

вот геттеры:

  sysAdmins: (state) =>
state.Employees.map((element) => (element.department_id = "3")),


 Employees: (state) => state.Employees,

вот мутаций:

  getsysAdmins(state, employees) {
state.sysAdmins = employees;

},

  getEmployees(state, employees) {
state.Employees = employees;

},

здесь
действий:

  getEmployees(context) {
const config = {
  headers: {
    "x-api-key": process.env.VUE_APP_SIRH_X_API_KEY,
    Authorization: localStorage.getItem("access_token"),
  },
};
return new Promise((resolve, reject) => {
  axios
    .get("/employees/all_employees", config)
    .then((response) => {
      context.commit("getEmployees", response.data.data.users);
      context.commit("getsysAdmins", response.data.data.users);

      resolve(response);
    })
    .catch((error) => {
      reject(error);
    });
});

},

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Если я правильно понимаю, вы хотите вернуть объект while Employee для тех сотрудников, которые работают в определенном отделе. Вы можете сделать это, отфильтровав свой массив Employees. Я написал бы это следующим образом:

getters: {
  employees: (state) => state.Employees,
  sysAdmins: (state) => state.Employees.filter((employee) => employee.department_id === 3),
  // If your DB returns a string as the department_id, you'll have to check against "3"
}

Если sysAdmins всегда является подмножеством сотрудников, имеет больше смысла всегда использовать геттер вместо того, чтобы помещать их в отдельный массив в состоянии.

Некоторые другие примечания:
- Ваши мутации называются get..., в то время как они являются сеттерами, может быть лучше их переименовать.
- В вашем действии вы в настоящее время устанавливаете тот же результат, что и работники, и sysAdmins. Опять же, я бы просто назначил сотрудников и всегда фильтровал sysAdmins из этого массива.

0 голосов
/ 22 апреля 2020

попробуйте ..

проверьте результат, используя console.log, чтобы убедиться в этом.

const newValue = {
   ...JSON.parse(localStorage.getItem("Employees")),
   department.id: 3
}

localStorage.setItem("Employees", JSON.stringify(newValue))

или

// Get the user from localStorage and parse into object
let department = JSON.parse(localStorage.getItem("Employees"));
// Update an attribute on the user object
Employees.department.id = 2;
// Update the user in localStorage and stringify to string
localStorage.setItem("Employees", JSON.stringify(Employees));
...