subscribeToProperties method

void subscribeToProperties()

Implementation

void subscribeToProperties() {
  try {
    final activeWidgets = this._activeWidgets;
    for (var id in activeWidgets.keys) {
      if (this.subscribeTo != null && this.subscribeTo!.isNotEmpty) {
        if (this.subscribeTo?.keys.contains(id) == false) {
          continue;
        }
      }
      final componentInstance = activeWidgets[id];
      var subscribedKeys;
      if (this.subscribeTo?.keys.contains(id) == true) {
        subscribedKeys = this.subscribeTo![id];
      } else {
        subscribedKeys = KeysToSubscribe.values;
      }

      /* hydrating the initial state,
      handles an edge case like when StateProvider is used in a drawer */
      current[id] = SearchControllerState(
        results: subscribedKeys.contains(KeysToSubscribe.Results)
            ? componentInstance!.results
            : null,
        aggregationData:
            subscribedKeys.contains(KeysToSubscribe.AggregationData)
                ? componentInstance!.aggregationData
                : null,
        requestStatus: subscribedKeys.contains(KeysToSubscribe.RequestStatus)
            ? componentInstance!.requestStatus
            : null,
        error: subscribedKeys.contains(KeysToSubscribe.Error)
            ? componentInstance!.error
            : null,
        value: subscribedKeys.contains(KeysToSubscribe.Value)
            ? componentInstance!.value
            : null,
        query: subscribedKeys.contains(KeysToSubscribe.Query)
            ? componentInstance!.query
            : null,
        dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
            ? componentInstance!.dataField
            : null,
        size: subscribedKeys.contains(KeysToSubscribe.Size)
            ? componentInstance!.size
            : null,
        from: subscribedKeys.contains(KeysToSubscribe.From)
            ? componentInstance!.from
            : null,
        fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
            ? componentInstance!.fuzziness
            : null,
        includeFields: subscribedKeys.contains(KeysToSubscribe.IncludeFields)
            ? componentInstance!.includeFields
            : null,
        excludeFields: subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
            ? componentInstance!.excludeFields
            : null,
        sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
            ? componentInstance!.sortBy
            : null,
        react: subscribedKeys.contains(KeysToSubscribe.React)
            ? componentInstance!.react
            : null,
        defaultQuery: subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
            ? componentInstance!.defaultQuery
            : null,
        customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
            ? componentInstance!.customQuery
            : null,
      );

      /* subscriberMethod to handle state changes */
      void subscriberMethod(ChangesController changes) {
        void applyChanges() {
          previous[id] = SearchControllerState(
            results: subscribedKeys.contains(KeysToSubscribe.Results)
                ? changes.Results?.prev
                : null,
            aggregationData:
                subscribedKeys.contains(KeysToSubscribe.AggregationData)
                    ? changes.AggregationData?.prev
                    : null,
            requestStatus:
                subscribedKeys.contains(KeysToSubscribe.RequestStatus)
                    ? changes.RequestStatus?.prev
                    : null,
            error: subscribedKeys.contains(KeysToSubscribe.Error)
                ? changes.Error?.prev
                : null,
            value: subscribedKeys.contains(KeysToSubscribe.Value)
                ? changes.Value?.prev
                : null,
            query: subscribedKeys.contains(KeysToSubscribe.Query)
                ? changes.Query?.prev
                : null,
            dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
                ? changes.DataField?.prev
                : null,
            size: subscribedKeys.contains(KeysToSubscribe.Size)
                ? changes.Size?.prev
                : null,
            from: subscribedKeys.contains(KeysToSubscribe.From)
                ? changes.From?.prev
                : null,
            fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
                ? changes.Fuzziness?.prev
                : null,
            includeFields:
                subscribedKeys.contains(KeysToSubscribe.IncludeFields)
                    ? changes.IncludeFields?.prev
                    : null,
            excludeFields:
                subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
                    ? changes.ExcludeFields?.prev
                    : null,
            sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
                ? changes.SortBy?.prev
                : null,
            react: subscribedKeys.contains(KeysToSubscribe.React)
                ? changes.React?.prev
                : null,
            defaultQuery:
                subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
                    ? changes.DefaultQuery?.prev
                    : null,
            customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
                ? changes.CustomQuery?.prev
                : null,
          );

          current[id] = SearchControllerState(
            results: subscribedKeys.contains(KeysToSubscribe.Results)
                ? changes.Results?.next
                : null,
            aggregationData:
                subscribedKeys.contains(KeysToSubscribe.AggregationData)
                    ? changes.AggregationData?.next
                    : null,
            requestStatus:
                subscribedKeys.contains(KeysToSubscribe.RequestStatus)
                    ? changes.RequestStatus?.next
                    : null,
            error: subscribedKeys.contains(KeysToSubscribe.Error)
                ? changes.Error?.next
                : null,
            value: subscribedKeys.contains(KeysToSubscribe.Value)
                ? changes.Value?.next
                : null,
            query: subscribedKeys.contains(KeysToSubscribe.Query)
                ? changes.Query?.next
                : null,
            dataField: subscribedKeys.contains(KeysToSubscribe.DataField)
                ? changes.DataField?.next
                : null,
            size: subscribedKeys.contains(KeysToSubscribe.Size)
                ? changes.Size?.next
                : null,
            from: subscribedKeys.contains(KeysToSubscribe.From)
                ? changes.From?.next
                : null,
            fuzziness: subscribedKeys.contains(KeysToSubscribe.Fuzziness)
                ? changes.Fuzziness?.next
                : null,
            includeFields:
                subscribedKeys.contains(KeysToSubscribe.IncludeFields)
                    ? changes.IncludeFields?.next
                    : null,
            excludeFields:
                subscribedKeys.contains(KeysToSubscribe.ExcludeFields)
                    ? changes.ExcludeFields?.next
                    : null,
            sortBy: subscribedKeys.contains(KeysToSubscribe.SortBy)
                ? changes.SortBy?.next
                : null,
            react: subscribedKeys.contains(KeysToSubscribe.React)
                ? changes.React?.next
                : null,
            defaultQuery:
                subscribedKeys.contains(KeysToSubscribe.DefaultQuery)
                    ? changes.DefaultQuery?.next
                    : null,
            customQuery: subscribedKeys.contains(KeysToSubscribe.CustomQuery)
                ? changes.CustomQuery?.next
                : null,
          );

          if (this.onChange is Function) {
            this.onChange!(current, previous);
          }
        }

        applyChanges();
      }

      _widgetSubscribers[id] = {
        "controller": componentInstance,
        "subscriberFunction": subscriberMethod,
      };

      componentInstance?.subscribeToStateChanges(
          subscriberMethod, subscribedKeys);
    }
  } catch (e) {
    print('error $e');
  }
}