# `MishkaCmsMigration.Resources.Changes.Decided`
[🔗](https://github.com/mishka-group/mishka_cms_migration/blob/v0.0.1/lib/mishka_cms_migration/resources/__changes/decided.ex#L5)

Keeps an admin's decision on the conflict an item waits on
(`MishkaCmsMigration.MigrationItem.conflict/1`): the choice is put in the item's `decisions`
under that conflict and brings the item back, so every later dry run and import follows it;
`"leave_out"` leaves the item out instead.

The conflict is the one the action's `conflict` argument names, one of the item's open conflicts
(`MishkaCmsMigration.MigrationItem.conflicts/1`), such as `"parent_missing"` for Import anyway on
an item that waits for its parent, or the item's first (`MishkaCmsMigration.MigrationItem.conflict/1`)
when it names none; one that is not open on the item is as none.

Import anyway and Wait for its parent (`"parent_missing"`) can be changed at any time, also once
an import wrote the item without its parent: neither moves the record the import wrote. Taken
back, the item waits for its parent again, and its record stays where the import wrote it until
the source changes the item; the next import that writes it again places it under its parent,
once the parent has a record.

Given as the action's `decision` argument, the choice of one item's Decide…, a choice the
conflict does not offer (`MishkaCmsMigration.MigrationItem.choices/1`), any choice on an item
that waits on none, and any choice on an item whose decision already took effect
(`MishkaCmsMigration.MigrationItem.settled?/1`), is refused on `decision`, in words an admin
reads; no choice changes nothing. A decision that took effect stays: an item an import wrote as
new is never moved onto the slug of the site's own record, which the Blog would refuse, and one
it connected to the site's record is never written over it.

    update :choose do
      argument :decision, :string
      change MishkaCmsMigration.Resources.Changes.Decided
    end

Given as `:choice`, the same answer for the rows an admin picked, it decides the items whose
conflict offers it and leaves the others as they are, so a bulk choice over mixed rows never
undoes the rows it answers.

    update :decide_keep do
      change {MishkaCmsMigration.Resources.Changes.Decided, choice: "keep"}
    end

With `bulk: true` the `decision` and `conflict` arguments answer every item of the update at once,
atomically: the choice is merged into `decisions` under the conflict in the database, or
`"leave_out"` leaves them out, in one `UPDATE` for a group the Decisions panel decides. The action
narrows the items to those that wait for that decision, so every one of them is open on the
conflict; a choice the conflict does not offer is refused on `decision`.

    update :decide do
      argument :conflict, :string
      argument :decision, :string
      change filter(expr(waits_for_decision and waiting_conflict == ^arg(:conflict)))
      change {MishkaCmsMigration.Resources.Changes.Decided, bulk: true}
    end

---

*Consult [api-reference.md](api-reference.md) for complete listing*
