localEvents property
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;
},
};