Size: a a a

2020 July 21

DS

Dmitriy Shuleshov in ☄️ effector
Yan👀 Lobaty
А если записать императивно код магически приобретет читаемость в трех кейсах свитча?🦦
Очень часто стал замечать как многие подменяют понятие "удобно\привычно" на "декларативно"
источник

NF

Nikita Fedorov in ☄️ effector
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
источник

NF

Nikita Fedorov in ☄️ effector
Dmitriy Shuleshov
Очень часто стал замечать как многие подменяют понятие "удобно\привычно" на "декларативно"
разница в том что match и case определяются вместе, а не раздельно, потому что у них один контекст
источник

DS

Dmitriy Shuleshov in ☄️ effector
Nikita Fedorov
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
Выглядит неплохо
источник

DS

Dmitriy Shuleshov in ☄️ effector
Dmitriy Shuleshov
Выглядит неплохо
А работать будет?
источник

A

Andrey in ☄️ effector
Nikita Fedorov
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
как минимум map -> watch
как максимум могут быть траблы с сср и девтулзами (не уверен, но возможно)
источник

A

Andrey in ☄️ effector
Nikita Fedorov
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
const match = (target) => ({type}) => target === type;
const withId = (fx) => fx.prepend(({entityId}) => entityId)


split({
source: fxFetchAccount,
match: {
 bank: match(AccountType.Bank),
 company: match(AccountType.Company),
 individual: match(AccountType.Individual),
},
cases: {
 bank:withId(fetchBankFx)
 company: withId(fetchCompanyFx),
 individual: withId(fetchIndividualFx),
}
});
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Tkachuk
ребзи, подгружаю сущность, для которой нужно подгрузить один из трёх типов других сущностей, хотел делать так через split
split({
 source: fetchClientFx.doneData.map(({ entityId }) => entityId),
 match: {
   bank: ({ type }) => type === AccountType.Bank,
   company: ({ type }) => type === AccountType.Company,
   individual: ({ type }) => type === AccountType.Individual,
 },
 cases: {
   bank: fetchBankFx,
   company: fetchCompanyFx,
   individual: fetchIndividualFx,
 },
})

но, эффекты принимают entityId, а match-еры весь обьект из fetchClientFx.doneData чтобы тип получить
как это правильно делать?
можно было бы через fn обрабатывать данные перед отправкой в таргеты, но эту фичу ещё не добавили
источник

ф

фильтруй мысли... in ☄️ effector
Andrey
const match = (target) => ({type}) => target === type;
const withId = (fx) => fx.prepend(({entityId}) => entityId)


split({
source: fxFetchAccount,
match: {
 bank: match(AccountType.Bank),
 company: match(AccountType.Company),
 individual: match(AccountType.Individual),
},
cases: {
 bank:withId(fetchBankFx)
 company: withId(fetchCompanyFx),
 individual: withId(fetchIndividualFx),
}
});
ну и key для таких случаев (тоже пока нет)

split({
source: fxFetchAccount,
key: ({type}) => type,
fn: ({entityId}) => entityId,
cases: {
 bank: fetchBankFx,
 company: fetchCompanyFx,
 individual: fetchIndividualFx,
}
})
источник

NF

Nikita Fedorov in ☄️ effector
Nikita Fedorov
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
вот так будет
источник

A

Andrey in ☄️ effector
фильтруй мысли
ну и key для таких случаев (тоже пока нет)

split({
source: fxFetchAccount,
key: ({type}) => type,
fn: ({entityId}) => entityId,
cases: {
 bank: fetchBankFx,
 company: fetchCompanyFx,
 individual: fetchIndividualFx,
}
})
про key немного не догнал(
источник

A

Andrey in ☄️ effector
Nikita Fedorov
вот так будет
bruh
источник

ф

фильтруй мысли... in ☄️ effector
Nikita Fedorov
вроде похоже на правду
fetchClientFx.doneData.map(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
function toEntityId({ entityId }) {
return entityId;
}
что-то непонятное ты в чистой функции (map) мутишь
источник

ф

фильтруй мысли... in ☄️ effector
Andrey
про key немного не догнал(
ну ты сравни свой пример и мой - это то же самое...
мы же через match всего лишь хотим определить в какой case слать данные
источник

A

Andrey in ☄️ effector
фильтруй мысли
ну ты сравни свой пример и мой - это то же самое...
мы же через match всего лишь хотим определить в какой case слать данные
а
если я прально понял, то вот так тогда должно быть?)
split({
source: fxFetchAccount.doneData,
key: ({type}) => type,
fn: ({entityId}) => entityId,
cases: {
  [AccountType.Bank]: fetchBankFx,
  [AccountType.Company]: fetchCompanyFx,
  [AccountType.Individual]: fetchIndividualFx,
}
})
источник

ф

фильтруй мысли... in ☄️ effector
Andrey
а
если я прально понял, то вот так тогда должно быть?)
split({
source: fxFetchAccount.doneData,
key: ({type}) => type,
fn: ({entityId}) => entityId,
cases: {
  [AccountType.Bank]: fetchBankFx,
  [AccountType.Company]: fetchCompanyFx,
  [AccountType.Individual]: fetchIndividualFx,
}
})
а... ну да
источник

NF

Nikita Fedorov in ☄️ effector
окей, мап и правда чистый
fetchClientFx.doneData.watch(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
источник

NF

Nikita Fedorov in ☄️ effector
Andrey
а
если я прально понял, то вот так тогда должно быть?)
split({
source: fxFetchAccount.doneData,
key: ({type}) => type,
fn: ({entityId}) => entityId,
cases: {
  [AccountType.Bank]: fetchBankFx,
  [AccountType.Company]: fetchCompanyFx,
  [AccountType.Individual]: fetchIndividualFx,
}
})
ну этот вариант избавлен от фатального недостатка прошлого варианта
источник

A

Andrey in ☄️ effector
Nikita Fedorov
ну этот вариант избавлен от фатального недостатка прошлого варианта
не избавлен от упомянутых траблов с девтулзами и сср
но это лучше у Димы или Совы уточнить
источник

DS

Dmitriy Shuleshov in ☄️ effector
Nikita Fedorov
окей, мап и правда чистый
fetchClientFx.doneData.watch(({ type, entityId }) => fetchFactory(type)(entityId));

function fetchFactory(type: AccountType) {
   switch(type) {
      case AccountType.Bank: return fetchBankFx;
      case AccountType.Company: return fetchCompanyFx;
      case AccountType.Individual: return fetchIndividualFx;
   }
}
Не для того я на эффектор пересел что б watch и лупашить
источник