ecomplus / storefront

Modern and high performant headless eCommerce Storefront. PWA & JAMstack architecture ready for E-Com Plus APIs. Built with Vue.js, extensible through widgets and editable with Netlify CMS.
https://developers.e-com.plus/storefront/
MIT License
101 stars 36 forks source link

Defaults no Netlify CMS #103

Closed leomp12 closed 4 years ago

leomp12 commented 4 years ago

Os defaults no Netlify CMS não preenchem as propriedades na collection do tipo file (com o arquivo já existente), na verdade pelo que li funciona apenas para folder collections com create: true, isto vale tanto para props tipo boolean e hidden.

Ou seja, na implementação atual adicionar um novo widget no storefront-template e na configuração padrão do CMS não funciona como deveria porque no storefront o lojista vai adicionar o novo widget sem as props que seriam preenchidas com defaults (ex.: https://github.com/lojatiasonia/emporiotiasonia/commit/69726ace21a428b58e2d617bf8b3f8f5dc01d049).

Na verdade eu já pensei em uma solução para o bug, mas encontrei uma alternativa que parece melhor aqui https://www.netlifycms.org/docs/collection-types/#filtered-folder-collections :

The entries for any folder collection can be filtered based on the value of a single field. By filtering a folder into different collections, you can manage files with different fields, options, extensions, etc. in the same folder.

Neste caso não utilizaríamos mais file collection para os widgets, e não precisaríamos mais mockar os arquivos (:hankey:) e acredito que (isto é o principal) resolveria o problema com defaults em widgets novos.

Dois possíveis problemas:

  1. Não sei se isto é uma feature disponível na versão que utilizamos agora do Netlify CMS (não achei na changelog), pode ser necessário outro deploy https://github.com/ecomclub/netlify-cms;
  2. Não sei se estes filtros funcionariam assim que o novo widget estiver sendo adicionado (filtrando por um campo title usando select ?) e já aplicariam de cara os fields, ou isto funcionaria apenas na edição de um widget já "criado" :thinking:
leomp12 commented 4 years ago

Adicionalmente, nas configurações dos widgets vários booleanos têm a propriedade required, na verdade deveria ser default (https://www.netlifycms.org/docs/widgets/boolean/ não tem required)

leomp12 commented 4 years ago

@vitorrgg pode ver isto pra mim por favor? Fixar esta configuração dos booleans (required -> default) e depois testar a implementação com o Filtered folder collections?

leomp12 commented 4 years ago

Já vi que a implementação com Filtered folder collections não funcionaria :disappointed:

@vitorrgg neste caso só corrige isto por favor:

Adicionalmente, nas configurações dos widgets vários booleanos têm a propriedade required, na verdade deveria ser default (https://www.netlifycms.org/docs/widgets/boolean/ não tem required)

O resto (sobre preencher os defaults) é comigo.

vitorrgg commented 4 years ago

No caso seria só remover as propriedades required no base-config.js mesmo né?

leomp12 commented 4 years ago

@vitorrgg remover sempre que for required: false (não altera nada em booleano), mas em alguns casos acho que booleanos estão required: true e provavelmente deveriam ser default: true;

Edit.: na verdade acredito que em alguns casos que estão required: false também seria interessante o default: true, no active dos widgets por exemplo (se fosse uma folder collection acho que o active deveria ser iniciado true no novo widget criado).

leomp12 commented 4 years ago

@vitorrgg deixa quieto por enquanto, na verdade não tenho certeza mais se o required: false faz diferença ou não pra booleano e de qualquer forma o bug mesmo eu já fixei. Obrigado;

leomp12 commented 4 years ago

O bug está resolvido mas tenho uma dúvida sobre como configurar os widgets no CMS ainda sobre estes defaults.

@vitorrgg @matheusgnreis

Nestes casos devemos deixamos os campos hidden ou required: false (boolean, string...)?

Se colocarmos hidden o lojista só poderá editar o campo manualmente no arquivo JSON. Caso contrário, com required: false, o campo até aparece no CMS mas poderá exibir o valor incorreto antes da primeira edição (isto é mais nítido com booleanos com padrão true).

leomp12 commented 4 years ago

Os widgets estão sendo copiados na instalação com mergeJson, neste caso os defaults são inseridos caso o arquivo de configuração no content seja inexistente ou objeto vazio: https://github.com/ecomplus/storefront/blob/master/%40ecomplus/storefront-template/scripts/install.js#L63

Portanto os campos não precisam ser hidden, não haverá problema com defaults inconsistentes.