Skip to content
This repository has been archived by the owner on Sep 5, 2024. It is now read-only.

Could not find the option to clear cache or "render" the client again #973

Open
johnico opened this issue Oct 19, 2022 · 2 comments
Open

Comments

@johnico
Copy link

johnico commented Oct 19, 2022

Hello

1 . i have to get a new api key by user action
once I update the config object , the ais-instasearch keep working with the previous api key

so i m trying to find a way to clear cache or update the config object , in order to "render again" the instance search without rendering all the component

  fetchKey(someData: string[]) {

    const data: Algolia.SearchApiKeyOnCallData = { someId, someData };
.......
    getAlgoliaApi(data)
      .toPromise()
      .then((apiKey: string) => {
        const searchClient = algoliasearch('id', apiKey);
        this.config = {
          indexName: `index`,
          searchClient,
        };
      })
      .catch((e) => {
      });

html :

  <ng-container *ngIf="config">
    <ais-instantsearch [config]="config">
    </ais-instantsearch>
   </ng-container>

2- is it possible to always query algolia without using cache request while search or using facets ? (without refresh button or smth like that)

tried searchClient.clearCache() (does not work)

@Haroenv
Copy link
Contributor

Haroenv commented Oct 19, 2022

Could it be that you're searching for Refresh?

@Component({
selector: 'ais-refresh',
template: `
<button
class="refresh"
(click)="refresh()"
>
refresh
</button>
`,
})
export class Refresh
extends TypedBaseWidget<NoopWidgetDescription, Record<string, unknown>>
implements OnInit {
constructor(
@Inject(forwardRef(() => NgAisIndex))
@Optional()
public parentIndex: NgAisIndex,
@Inject(forwardRef(() => NgAisInstantSearch))
public instantSearchInstance: NgAisInstantSearch
) {
super('Refresh');
}
public ngOnInit() {
this.createWidget(connectNoop, {});
super.ngOnInit();
}
refresh() {
this.instantSearchInstance.refresh();
}
}

Also the cache can be disabled completely by passing:

// v3 algoliasearch
const searchClient = algoliasearch('id', 'key', { cache: false });
// v4 algoliasearch
import { createNullCache } from '@algolia/cache-common';

const searchClient = algoliasearch('id', 'key', {
 {
    // Caches responses from Algolia
    responsesCache: createNullCache()

    // Caches Promises with the same request payload
    requestsCache: createNullCache()
  },
});

@johnico
Copy link
Author

johnico commented Oct 19, 2022

@Haroenv about cache this is good. thanks

the issue is that if i replace the apiKey because i got a new client the instasne seatch still has the same client

i print the apiKey and it is the same always until i will refresh or re render the page

i figured it out only by render all component again so it will generate the html (with ng-if) from scratch but this is a bad solution for me because i got "refresh" and lost my search params

so i have the function fetchKey() that update the "this.config" with the searchClient , but its does not help
the instance still with the first one
i thunk might be the search client is part of config object and the angular did not recognize it a change?
so at the end my goal is to replace the search client without refresh the page

  • also after updated the searchClient , how can I call to the query to update the state ? kind of refresh but not from a button .

so to focus the question:

i got action from user to update list
based on this list i generate a new searchClient
now i need to update the ui +refresh the queries on the ui because now i have a different data

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants