znamenica/dneslov

View on GitHub
app/components/memoMeta.jsx

Summary

Maintainability
F
3 days
Test Coverage
import { matchLanguages, matchAlphabeths, matchLetters, matchEmptyObject, matchCodes, matchEmptyCollection } from 'matchers'
import UrlRegexp from 'UrlRegexp'

export const memoMeta = {
   default: 'memory',
   remoteNames: 'memoes',
   remoteName: 'memo',
   title: 'Помины',
   new: 'Новый помин',
   update: 'Обнови память',
   create: 'Создай память',
   close: 'Закрой',
   remove: {
      title: 'Точно ли удалить помин %default?',
      yes: "Да"
   },
   row: {
      order: {
         title: 'Чин',
         value: (value) => { return value.memo_orders && value.memo_orders[0] && value.memo_orders[0].order },
      },
      memory: {
         title: 'Память',
         value: (value) => { return value.memory_name },
      },
      year_date: {
         title: 'Дата',
      },
      event: {
         title: 'Событие',
         value: (value) => { return value.event_short_title },
      },
      bond_to: {
         title: 'Связка с...',
         value: (value) => {
            if (value.bond_to_year_date && value.bond_to_year_date.length > 40) {
               return value.bond_to_year_date.slice(0, 40) + '...'
            } else {
               return value.bond_to_year_date
            }
         },
      },
      add_date: {
         title: 'Добавлено...',
      },
      calendary: {
         title: 'Календарь',
         value: (value) => { return value.calendary_title },
      }
   },
   form: {
      calendary_id: {
         kind: 'dynamic',
         title: 'Календарь',
         humanized_name: 'calendary_title',
         pathname: 'short_calendaries',
         key_name: 'value',
         value_name: 'key',
         placeholder: 'Начни ввод наименования календаря...',
         display_scheme: '12-6-4-4',
         validations: {
            "Календарь должен быть избран": /^$/
         }
      },
      memory_id: {
         kind: 'dynamic',
         humanized_name: 'memory_name',
         display_scheme: '12-6-4-4',
         pathname: 'short_memories',
         key_name: 'value',
         value_name: 'key',
         title: 'Память',
         placeholder: 'Начни ввод текста имени или описания памяти...',
         validations: {
            "Память должна быть избрана": /^$/
         }
      },
      event_id: {
         kind: 'dynamic',
         context_names: 'memory_id',
         humanized_name: 'event_short_title',
         pathname: 'short_events',
         key_name: 'value',
         value_name: 'key',
         title: 'Событие',
         placeholder: 'Начни ввод имени события...',
         display_scheme: '12-6-4-4',
         validations: {
            "Событие должно быть избрано": /^$/
         }
      },
      add_date: {
         kind: 'text',
         title: 'Пора добавления',
         placeholder: 'Введи пору',
         display_scheme: '12-6-3-3',
         validations: {
            "Пора отсутствует":matchEmptyObject,
         }
      },
      year_date: {
         kind: 'text',
         title: 'Дата в году',
         placeholder: 'Введи дату в году',
         data: { length: '7' },
         display_scheme: '12-3-2-2',
         validations: {
            "Слишком длинное значение даты в году": /^.{8,}$/,
            "Годовая дата отсутствует": (value, context) => {
               return !value && context.bind_kind_code != "соборный"
            },
            "В значении даты допустимы только цифры, точка, знаки отношения (%,>,<,~) или знаки + и -": /[^0-9+\.\-%<>~]/,
            "Знак отношения должен следовать за годичной датой": /^([0-9]+\.?|)[%<>~]/,
            "Опорный день после знака отношения обязателен": /^[0-9\.]+[%<>~]([^0-6]|)?$/,
            "Знак + или - может только предварять число": /^.[\-+]{1,4}$/,
            "Цифры должны быть введены обязательно": /^[\-+\.]+$/,
         }
      },
      bind_kind_code: {
         kind: 'select',
         title: 'Вид привязки к помину',
         codeNames: {
            '': 'Избери вид привязки...',
            'несвязаный': 'Не привязаный',
            'соборный': 'Соборный помин',
            'навечерие': 'Навечерие',
            'предпразднество': 'Предпразднество',
            'попразднество': 'Попразднество',
         },
         display_scheme: '12-3-3-3',
         subscribeTo: '@bond_to_id',
         validations: {
            'Пункт из списка должен быть выбран': matchEmptyObject,
            'Вид привязки не должен иметь значение "Не привязаный" в случае, если привязка задана': (value, context) => {
               return context.bond_to_id && value == "несвязаный"
            },
            'Вид привязки должен иметь значение "Не привязаный" в случае, если привязка отсутствует': (value, context) => {
               return !context.bond_to_id && value != "несвязаный"
            },
         }
      },
      bond_to_id: {
         kind: 'dynamic',
         title: 'Привязаный помин',
         humanized_name: 'bond_to_year_date',
         display_scheme: '12-6-4-4',
         placeholder: 'Начни ввод даты привязаного помина...',
         pathname: 'short_memoes',
         key_name: 'value',
         value_name: 'key',
         subscribeTo: '@bind_kind_code',
         visible_if: { bind_kind_code: ["соборный", "навечерие", "предпразднество", "попразднество"] },
         context_names: {
           'calendary_id': true,
           'memory_id': true,
         },
         validations: {
            'Привязаная дата не должна соответствовать текущей дате': (value, context) => {
               let yearDateIn = context.bond_to_year_date || context.bond_to || "",
                   match = yearDateIn.match(/^[0-9\.]+/),
                   yearDate = match && match[0]
               return value && yearDate == context.year_date && context.bind_kind_code != 'соборный'
            }
         },
      },
      memo_orders: {
         kind: 'collection',
         title: 'Чины',
         action: 'Добавь чин',
         display_scheme: '12-12-12-12',
         validations: {
            "Языки в чинах не могут совпадать": matchLanguages,
            "Азбуки в чинах не могут совпадать": matchAlphabeths,
            'Минимум один чин должен быть задан':  matchEmptyObject
         },
         meta: {
            id: {
               kind: 'hidden',
            },
            order_id: {
               kind: 'dynamic',
               title: 'Чин',
               pathname: 'short_orders',
               humanized_name: 'order',
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования чина...',
               display_scheme: '12-12-12-12',
               validations: {
                  "Чин отсутствует": matchEmptyObject,
                  'Чин содержит знаки вне перечня избранной азбуки': matchLetters,
               }
            },
         }
      },
      titles: {
         kind: 'collection',
         title: 'Заголовки',
         action: 'Добавь заголовок',
         single: 'Заголовок',
         placeholder: 'Введи заголовок',
         source: "descriptions",
         filter: { type: "Title" },
         display_scheme: '12-12-12-12',
         validations: {
            "Языки в заголовках не могут совпадать": matchLanguages,
            "Азбуки в заголовках не могут совпадать": matchAlphabeths,
            'Минимум один заголовок должен быть задан':  matchEmptyObject
         },
         meta: {
            id: {
               kind: 'hidden',
            },
            text: {
               kind: 'tale',
               title: 'Заголовок',
               placeholder: 'Введи заголовок',
               display_scheme: '12-12-12-12',
               subscribeTo: '@alphabeth_code',
               validations: {
                  "Заголовок отсутствует": matchEmptyObject,
                  'Заголовок содержит знаки вне перечня избранной азбуки': matchLetters,
               }
            },
            language_code: {
               kind: 'dynamic',
               title: 'Язык',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'language',
               context_value: { k: "Language" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования языка...',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Избранный язык не соотвествует избранной азбуке': matchCodes,
                  'Язык из списка должен быть выбран': matchEmptyObject,
               }
            },
            alphabeth_code: {
               kind: 'dynamic',
               title: 'Азбука',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'alphabeth',
               context_value: { k: "Alphabeth" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования азбуки...',
               subscribeTo: '@language_code',
               validations: {
                  'Избранная азбука не соотвествует избранному языку': matchCodes,
                  'Азбука из списка должна быть выбрана': matchEmptyObject,
               }
            },
         }
      },
      notes: {
         kind: 'collection',
         title: 'Заметки',
         action: 'Добавь заметку',
         single: 'Заметка',
         placeholder: 'Введи заметку',
         source: "descriptions",
         filter: { type: "Note" },
         display_scheme: '12-12-12-12',
         meta: {
            id: {
               kind: 'hidden',
            },
            text: {
               kind: 'tale',
               title: 'Заметка',
               placeholder: 'Введи заметку',
               display_scheme: '12-12-12-12',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Текст заметки отсутствует': matchEmptyObject,
                  'Заметка содержит знаки вне перечня избранной азбуки': matchLetters,
               }
            },
            language_code: {
               kind: 'dynamic',
               title: 'Язык',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'language',
               context_value: { k: "Language" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования языка...',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Избранный язык не соотвествует избранной азбуке': matchCodes,
                  'Язык из списка должен быть выбран': matchEmptyObject,
               }
            },
            alphabeth_code: {
               kind: 'dynamic',
               title: 'Азбука',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'alphabeth',
               context_value: { k: "Alphabeth" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования азбуки...',
               subscribeTo: '@language_code',
               validations: {
                  'Избранная азбука не соотвествует избранному языку': matchCodes,
                  'Азбука из списка должна быть выбрана': matchEmptyObject,
               }
            },
         }
      },
      descriptions: {
         kind: 'collection',
         title: 'Описания',
         action: 'Добавь описание',
         single: 'Описание',
         placeholder: 'Введи описание',
         filter: { type: "Description" },
         display_scheme: '12-12-12-12',
         meta: {
            id: {
               kind: 'hidden',
            },
            text: {
               kind: 'tale',
               title: 'Описание',
               placeholder: 'Введи описание',
               display_scheme: '12-12-12-12',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Текст описания отсутствует': matchEmptyObject,
                  'Описание содержит знаки вне перечня избранной азбуки': matchLetters,
               }
            },
            language_code: {
               kind: 'dynamic',
               title: 'Язык',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'language',
               context_value: { k: "Language" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования языка...',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Избранный язык не соотвествует избранной азбуке': matchCodes,
                  'Язык из списка должен быть выбран': matchEmptyObject,
               }
            },
            alphabeth_code: {
               kind: 'dynamic',
               title: 'Азбука',
               display_scheme: '12-6-6-6',
               pathname: 'short_subjects',
               humanized_name: 'alphabeth',
               context_value: { k: "Alphabeth" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования азбуки...',
               subscribeTo: '@language_code',
               validations: {
                  'Избранная азбука не соотвествует избранному языку': matchCodes,
                  'Азбука из списка должна быть выбрана': matchEmptyObject,
               }
            },
         }
      },
      links: {
         kind: 'collection',
         display_scheme: '12-12-12-12',
         title: 'Ссылки',
         action: 'Добавь ссылку',
         placeholder: 'Введи ссылку',
         source: "links",
         meta: {
            id: {
               kind: 'hidden',
            },
            url: {
               kind: 'text',
               title: 'Ссылка',
               placeholder: 'Введи ссылку',
               display_scheme: '12-12-6-6',
               subscribeTo: '@alphabeth_code',
               validations: {
                  "Ссылка отсутствует": matchEmptyObject,
                  "Неверный формат ссылки": [ "!", UrlRegexp ],
               }
            },
            language_code: {
               kind: 'dynamic',
               title: 'Язык',
               display_scheme: '12-4-2-2',
               pathname: 'short_subjects',
               humanized_name: 'language',
               context_value: { k: "Language" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования языка...',
               subscribeTo: '@alphabeth_code',
               validations: {
                  'Избранный язык не соотвествует избранной азбуке': matchCodes,
                  'Язык из списка должен быть выбран': matchEmptyObject,
               }
            },
            alphabeth_code: {
               kind: 'dynamic',
               title: 'Азбука',
               display_scheme: '12-4-2-2',
               pathname: 'short_subjects',
               humanized_name: 'alphabeth',
               context_value: { k: "Alphabeth" },
               key_name: 'value',
               value_name: 'key',
               placeholder: 'Начни ввод наименования азбуки...',
               subscribeTo: '@language_code',
               validations: {
                  'Избранная азбука не соотвествует избранному языку': matchCodes,
                  'Азбука из списка должна быть выбрана': matchEmptyObject,
               }
            },
            type: {
               kind: 'select',
               title: 'Вид ссылки',
               codeNames: {
                  '': 'Избери вид текста...',
                  'DescriptiveLink': 'Описательная ссылка',
                  'ServiceLink': 'Службовая ссылка',
                  'BeingLink': 'Бытийная ссылка',
               },
               display_scheme: '12-4-2-2',
               validations: {
                  'Пункт из списка должен быть выбран': matchEmptyObject,
               },
            },
         }
      },
   },
}