keystonejs

Set Keystone List "noedit" based on field value?


I would like to make my Keystone List object editable only if the object is not published. Here's my reduced List definition:

var Campaign = new keystone.List('Campaign', {
  nodelete: true,
  track: {
    createdAt: true,
  },
});

Campaign.add({
  ...,
  publish: {
    type: Types.Boolean,
    required: false,
    initial: false,
    dependsOn: {
      publishedOn: '',
    },
  },
  publishedOn: {
    type: Types.Datetime,
    label: 'Published On',
    hidden: true,
  },
});

Is it possible to set noedit only if publishedOn is not null? I'm trying to prevent the object from being modified after it's "published", and am coming up short on examples.


Solution

  • Interestingly, I was able to make the publish field simply check itself:

    Campaign.add({
      ...,
      publish: {
        type: Types.Boolean,
        required: false,
        initial: false,
    
        dependsOn: {
          publish: false,
        },
    
      },
      ...,
    });
    

    and now it only shows if publish is false, which works exactly as I hoped it would.