コード例 #1
0
        public static IDataGridColumn <RecordT> Build <RecordT>(
            Func <DataGridModel <RecordT> > model,
            params Tuple <string, Func <RecordT, bool> >[] customSelection) where RecordT : new()
        {
            var header = new LocalValue <string>(string.Format(I18n.Translate("{0} of {1}"), 0, 0));

            var defaultActions = new List <HTMLElement> {
                new HTMLAnchorElement {
                    Href        = "#",
                    TextContent = I18n.Translate("All")
                }.With(x => {
                    x.OnClick += ev => {
                        ev.PreventDefault();
                        model().Selected.Replace(model().Items);
                    };
                }),
                new HTMLAnchorElement {
                    Href        = "#",
                    TextContent = I18n.Translate("None")
                }.With(x => {
                    x.OnClick += ev => {
                        ev.PreventDefault();
                        model().Selected.Clear();
                    };
                })
            };

            return(new DataGridColumn <RecordT, bool>(
                       header,
                       TextType.TreatAsText,
                       x => model().Selected.Contains(x),
                       x => LocalizationUtil.BoolToUnicodeCheckbox(x),
                       (x, exp) => exp.Export(x),
                       _ => Tuple.Create <HTMLElement, DataGridColumnControllerResult <bool> >(null,
                                                                                               new DataGridColumnControllerResult <bool> {
                FilterImpl = null,
                AggregationImpl = null,
                GroupingImpl = null,
                SortingImpl = null,
                IsGroupingActive = () => false
            }),
                       new SelectedItemsListener <RecordT>(model),
                       m => {
                var v = new InputCheckboxView("");
                v.Widget.ClassList.Add(Magics.CssClassIsSelectionHandler);

                v.BindReadWriteAndInitialize(m);
                return v;
            },
                       new List <Validate <bool> >(),
                       (x, toBeSelected) => {
                var isSelected = model().Selected.Contains(x);
                if (!isSelected && toBeSelected)
                {
                    model().Selected.InsertAt(0, x);
                }
                else if (isSelected && !toBeSelected)
                {
                    model().Selected.Delete(x);
                }
            },
                       null,
                       null,
                       true,
                       () => {
                var cntnr = new HTMLDivElement();
                cntnr.Style.Display = Display.Flex;
                cntnr.Style.FlexDirection = FlexDirection.Column;

                var customActions = customSelection.Select(x =>
                                                           new HTMLAnchorElement {
                    Href = "#",
                    TextContent = x.Item1
                }.With(y => {
                    y.OnClick += ev => {
                        ev.PreventDefault();
                        model().Selected.Replace(model().Items.Where(z => x.Item2(z)));
                    };
                })
                                                           );

                defaultActions
                .Concat(customActions)
                .ForEach(x => cntnr.AppendChild(x));

                return cntnr;
            },
                       dgmodel => {
                var mdl = dgmodel ?? model();
                if (mdl == null)
                {
                    throw new Exception("datagrid model is null");
                }

                // initialize
                var selectedCount = mdl.Selected.Length;
                var allCount = mdl.Items.Length;
                header.DoChange(string.Format(I18n.Translate("{0} of {1}"), selectedCount, allCount), false);

                mdl.Selected.Changed += (_, __, ___) => {
                    selectedCount = model().Selected.Length;
                    header.DoChange(string.Format(I18n.Translate("{0} of {1}"), selectedCount, allCount), false);
                };

                mdl.Items.Changed += (_, __, ___) => {
                    allCount = model().Items.Length;
                    header.DoChange(string.Format(I18n.Translate("{0} of {1}"), selectedCount, allCount), false);
                };
            }
                       ));
        }