localEvents property

Map<String, Object> localEvents
final

Local events map for testing purposes.

Implementation

static final localEvents = <String, Object>{
  'test': (a) => "You passed '$a'",
  'macro': (String template, Object? data) {
    if (template.endsWith(FinchApp.config.widgetsType)) {
      template = template.replaceAll(".${FinchApp.config.widgetsType}", '');
    }
    var params = <String, Object?>{};
    if (data is Map) {
      for (var key in data.keys) {
        params[key.toString()] = data[key];
      }
    }
    return Context.rq.renderAsync(path: template, viewParams: params);
  },
  'updateUrlQuery': ([Object? updates]) {
    if (updates is String) {
      updates = jsonDecode(updates);
    }

    var newParams = <String, String>{};
    if (updates is Map) {
      for (var key in updates.keys) {
        newParams[key] = updates[key].toString();
      }
    }

    var queryParams = Context.rq.uri.queryParameters
        .map((key, value) => MapEntry(key, value));

    var newUrl = Uri(
      queryParameters: {
        ...queryParams,
        ...newParams,
      },
    );

    return newUrl.toString();
  },
  'removeUrlQuery': (dynamic keys) {
    var queryParams = Context.rq.uri.queryParameters
        .map((key, value) => MapEntry(key, value));

    for (var key in keys) {
      queryParams.remove(key);
    }

    var newUrl = Uri(
      queryParameters: queryParams,
    );

    return newUrl.toString();
  },
  'existUrlQuery': (dynamic keys) {
    for (var key in keys) {
      if (Context.rq.uri.queryParameters.containsKey(key) &&
          Context.rq.uri.queryParameters[key] != null &&
          Context.rq.uri.queryParameters[key]!.isNotEmpty) {
        return true;
      }
    }
    return false;
  },
  'endpointQuery': () {
    var endpoint = Context.rq.uri.path;
    if (Context.rq.uri.queryParameters.isNotEmpty) {
      endpoint += '?${Context.rq.uri.query}';
    }
    return endpoint;
  },
  'log': (Object? value) {
    Console.e(value);
    return value;
  },
  'pathStartsWith': (String path) {
    return Context.rq.uri.path.startsWith(path);
  },
  'checkPath': (String path) {
    var uri = Context.rq.uri.path;

    if (path.endsWith('/')) path = path.substring(0, path.length - 1);
    if (path.startsWith('/')) path = path.substring(1);
    if (uri.endsWith('/')) uri = uri.substring(0, uri.length - 1);
    if (uri.startsWith('/')) uri = uri.substring(1);

    var current = uri.split('/');
    var check = path.split('/');

    if (current.length != check.length &&
        check.isNotEmpty &&
        check.last != '?') {
      return false;
    }

    for (var i = 0; i < check.length; i++) {
      var section = check[i];
      if (section == "*") {
        continue;
      }
      if (section.contains('?')) {
        return true;
      }
      if (i >= current.length || section != current[i]) {
        return false;
      }
    }
    return true;
  },
};