render method

  1. @override
ValueProvider render(
  1. JSONRender render,
  2. DivElement output,
  3. dynamic node,
  4. dynamic nodeOriginal,
  5. NodeKey nodeKey,
)
override

Implementation

@override
ValueProvider render(JSONRender render, DivElement output, dynamic node,
    dynamic nodeOriginal, NodeKey nodeKey) {
  var unixEpoch = parseUnixEpoch(node)!;
  var dateTime = toDateTime(unixEpoch, true).toLocal();

  Element elem;
  ValueProvider valueProvider;

  if (render.renderMode == JSONRenderMode.input) {
    var dateTimeLocal = _dateFormatDatetimeLocal.format(dateTime);

    elem = InputElement()
      ..value = dateTimeLocal
      ..type = 'datetime-local';
    valueProvider = (parent) {
      var time = toUnixEpoch((elem as InputElement).value)!;

      var timeDiff = unixEpoch - time;
      if (timeDiff > 0 && timeDiff <= 1000) {
        time += timeDiff;
      }

      return time;
    };
  } else {
    var dateTimeStr = _dateFormatYYYYMMDDHHMMSS.format(dateTime);

    elem = SpanElement()..text = dateTimeStr;

    elem.onClick.listen((e) {
      copyElementToClipboard(elem);

      var val = '${elem.text}';
      if (RegExp(r'^\d+$').hasMatch(val)) {
        elem.text = dateTimeStr;
      } else {
        elem.text = '$unixEpoch';
      }
    });

    valueProvider = (parent) => nodeOriginal;
  }

  output.children.add(elem);

  applyCSS(render, output, extraElements: [elem]);

  return valueProvider;
}