diff --git a/docs/assets/webparts/search-filters/filter_deep_linking.png b/docs/assets/webparts/search-filters/filter_deep_linking.png new file mode 100644 index 000000000..3adedb579 Binary files /dev/null and b/docs/assets/webparts/search-filters/filter_deep_linking.png differ diff --git a/docs/usage/search-filters/index.md b/docs/usage/search-filters/index.md index f0d56f34e..448966f11 100644 --- a/docs/usage/search-filters/index.md +++ b/docs/usage/search-filters/index.md @@ -64,3 +64,14 @@ Using an indexed property bag value could be useful to store information about a `L0|#a2cf1afb-44b6-4cf4-bf37-642bb2e9bff3|Category 1;L0|#02e3406c0-1048-4bce-90eb-e7a51dfa7f31|Category3;L0|#07e094327-23d7-48af-9699-781eb26dc40f|Category2` These taxonomy values can then be used in the Filters Web Part using a `RefinableStringXX` search managed property to filter specific sites or elements. As an example, you can refer to the ["Create an end-to-end Office 365 groups provisioning solution"](https://github.com/pnp/tutorial-workspace-provisioning) tutorial GitHub project to leverage this format. + +## Filter deep linking + +The Search Filter Web Part supports deep linking, meaning you can preselect filters from the URL at page load. When filter values are selected, a query string parameter `f` is append to the current URL containing the current filter values data. + +> If you have connected the search result web part to a search box, ensure the search term is set to be dynamic and part of the URL in the search box web part. If not, copying the URL will not contain the search terms." + +!["Filters deep linking"](../../assets/webparts/search-filters/filter_deep_linking.png){: .center} + +!!! important + **We recommend to use the URL generated from filter values selection instead of crafting the URL manually.** diff --git a/search-extensibility/package.json b/search-extensibility/package.json index 5678e622a..db1f7f1a0 100644 --- a/search-extensibility/package.json +++ b/search-extensibility/package.json @@ -1,7 +1,7 @@ { "name": "@pnp/modern-search-extensibility", "description": "Base library for creating PnP Modern Search extensions", - "version": "1.0.5", + "version": "1.0.6", "private": false, "main": "lib/index.js", "engines": { diff --git a/search-extensibility/src/models/dataSources/IDataContext.ts b/search-extensibility/src/models/dataSources/IDataContext.ts index e4e650208..c6b859a8a 100644 --- a/search-extensibility/src/models/dataSources/IDataContext.ts +++ b/search-extensibility/src/models/dataSources/IDataContext.ts @@ -73,6 +73,11 @@ export interface IDataContext { /** * The current selected sorting for this data source */ - selectedSorting?: ISortFieldConfiguration[]; + selectedSorting?: ISortFieldConfiguration[]; }; + + /** + * Information about current query string parameters + */ + queryStringParameters?: {[name: string]: string }; } \ No newline at end of file diff --git a/search-extensibility/tsconfig.json b/search-extensibility/tsconfig.json index 0a9f82db5..23550f1c5 100644 --- a/search-extensibility/tsconfig.json +++ b/search-extensibility/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "./node_modules/@microsoft/rush-stack-compiler-3.7/includes/tsconfig-web.json", "compilerOptions": { - "target": "es5", + "target": "es6", "forceConsistentCasingInFileNames": true, "module": "esnext", "moduleResolution": "node", @@ -23,9 +23,10 @@ "webpack-env" ], "lib": [ - "es5", - "dom", - "es2015.collection" + "es6", + "dom", + "es2015.collection", + "es2015.promise" ] }, "include": [ diff --git a/search-parts/config/package-solution.json b/search-parts/config/package-solution.json index d50aae80f..ff00c8f61 100644 --- a/search-parts/config/package-solution.json +++ b/search-parts/config/package-solution.json @@ -3,7 +3,7 @@ "solution": { "name": "PnP Modern Search - Search Web Parts - v4", "id": "59903278-dd5d-4e9e-bef6-562aae716b8b", - "version": "4.4.0.0", + "version": "4.4.1.0", "includeClientSideAssets": true, "skipFeatureDeployment": true, "isDomainIsolated": false, diff --git a/search-parts/package.json b/search-parts/package.json index cdc2d1e58..0d86d0728 100644 --- a/search-parts/package.json +++ b/search-parts/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/modern-search-web-parts", - "version": "4.4.0", + "version": "4.4.1", "private": true, "main": "lib/index.js", "engines": { @@ -25,7 +25,7 @@ "@microsoft/sp-property-pane": "1.12.1", "@microsoft/sp-webpart-base": "1.12.1", "@pnp/common": "2.0.13", - "@pnp/modern-search-extensibility": "1.0.5", + "@pnp/modern-search-extensibility": "1.0.6", "@pnp/spfx-controls-react": "3.3.0", "@pnp/spfx-property-controls": "3.2.0", "@pnp/telemetry-js": "2.0.0", diff --git a/search-parts/src/components/CollapsibleContentComponent.tsx b/search-parts/src/components/CollapsibleContentComponent.tsx index 96e73e2ca..e82b59d79 100644 --- a/search-parts/src/components/CollapsibleContentComponent.tsx +++ b/search-parts/src/components/CollapsibleContentComponent.tsx @@ -171,7 +171,7 @@ export class CollapsibleContentComponent extends React.Component { - this._onTogglePanel(props) + this._onTogglePanel(props); }} onKeyPress={(e) => { if (e.charCode === 13) { diff --git a/search-parts/src/helpers/UrlHelper.ts b/search-parts/src/helpers/UrlHelper.ts index f0ec37d29..359eb2b1c 100644 --- a/search-parts/src/helpers/UrlHelper.ts +++ b/search-parts/src/helpers/UrlHelper.ts @@ -73,6 +73,21 @@ export class UrlHelper { return newString; } + /** + * Gets the current query string parameters + * @returns query string parameters as object + */ + public static getQueryStringParams(): {[parameter: string]: string } { + + let queryStringParameters: {[parameter: string]: string } = {}; + const urlParams = new URLSearchParams(window.location.search); + urlParams.forEach((value, key) => { + queryStringParameters[key] = value; + }); + + return queryStringParameters; + } + /** * Decodes a provided string * @param encodedStr the string to decode diff --git a/search-parts/src/layouts/results/detailsList/DetailListLayout.ts b/search-parts/src/layouts/results/detailsList/DetailListLayout.ts index 2b7c512fc..468bdc752 100644 --- a/search-parts/src/layouts/results/detailsList/DetailListLayout.ts +++ b/search-parts/src/layouts/results/detailsList/DetailListLayout.ts @@ -314,7 +314,7 @@ export class DetailsListLayout extends BaseLayout key: `${field.id}-${itemId}`, checked: item[field.id] ? item[field.id] : false, onChange: (ev, value) => { - onChange(field.id, value) + onChange(field.id, value); this._updateRequiredValueSorting(value, otherDependentField, item, onCustomFieldValidation); }, disabled: field.disableEdit, diff --git a/search-parts/src/loc/pl-pl.js b/search-parts/src/loc/pl-pl.js new file mode 100644 index 000000000..8c609d888 --- /dev/null +++ b/search-parts/src/loc/pl-pl.js @@ -0,0 +1,325 @@ +define([], function() { + return { + Tokens: { + SelectTokenLabel: "Wybierz token...", + Context: { + ContextTokensGroupName: "Tokeny kontekstowe", + SiteAbsoluteUrl: "Absolutny adres URL kolekcji witryn", + SiteRelativeUrl: "Relatywny adres URL kolekcji witryn", + WebAbsoluteUrl: "Absolutny adres URL witryny", + WebRelativeUrl: "Relatywny adres URL witryny", + WebTitle: "Tytuł witryny", + InputQueryText: "Wprowadź tekst zapytania" + }, + Custom: { + CustomTokensGroupName: "Wartość niestandardowa", + CustomValuePlaceholder: "Wprowadź wartość...", + InvalidtokenFormatErrorMessage: "Proszę wprowadzić poprawny format tokenu używając '{' oraz '}'. (na przykład: {Today})" + }, + Date: { + DateTokensGroupName: "Tokeny dat", + Today: "Dziś", + Yesterday: "Wczoraj", + Tomorrow: "Jutro", + OneWeekAgo: "Tydzień temu", + OneMonthAgo: "Miesiąc temu", + OneYearAgo: "Rok temu" + }, + Page: { + PageTokensGroupName: "Tokeny strony", + PageId: "Identyfikator strony", + PageTitle: "Tytuł strony", + PageCustom: "Inna kolumna strony", + }, + User: { + UserTokensGroupName: "Tokeny użytkownika", + UserName: "Nazwa użytkownika", + Me: "Ja", + UserDepartment: "Departament użytkownika", + UserCustom: "Właściwość niestandardowa" + } + }, + General: { + OnTextLabel: "Włączone", + OffTextLabel: "Wyłączone", + StaticArrayFieldName: "Tablica jako pole", + About: "O produkcie", + Authors: "Autorzy", + Version: "Wersja", + InstanceId: "Identyfikator instancji składnika Web Part", + Resources: { + GroupName: "Zasoby", + Documentation: "Dokumentacja", + PleaseReferToDocumentationMessage: "Proszę zapoznać się z oficjalną dokumentacją." + }, + Extensibility: { + InvalidDataSourceInstance: "Wybrane źródło danych '{0}' nie implementuje poprawnie klasy abstrakcyjnej 'BaseDataSource'. Brakuje niektórych metod.", + DataSourceDefinitionNotFound: "Nie znaleziono niestandardowego źródła danych o kluczu '{0}'. Upewnij się, że rozwiązanie jest poprawnie wdrożone do katalogu aplikacji oraz ID manifetu jest zarejetrowany dla tego składnika Web Part.", + LayoutDefinitionNotFound: "Nie znaleziono niestandardowego układu o kluczu '{0}'. Upewnij się, że rozwiązanie jest poprawnie wdrożone do katalogu aplikacji oraz ID manifetu jest zarejetrowany dla tego składnika Web Part.", + InvalidLayoutInstance: "Wybrane układ '{0}' nie implementuje poprawnie klasy abstrakcyjnej 'BaseLayout'. Brakuje niektórych metod.", + DefaultExtensibilityLibraryName: "Domyślna biblioteka rozszerzalności", + InvalidProviderInstance: "Wybrany dostawca sugestii '{0}' nie implementuje poprawnie abstrakcyjnej klasy 'BaseSuggestionProvider'. Brakuje niektórych metod.", + ProviderDefinitionNotFound: "Nie znaleziono niestandardowego dostawcy sugestii o kluczu '{0}'. Upewnij się, że rozwiązanie jest poprawnie wdrożone do katalogu aplikacji oraz ID manifetu jest zarejetrowany dla tego składnika Web Part.", + }, + DateFromLabel: "Od", + DateTolabel: "Do", + DatePickerStrings: { + months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'], + shortMonths: ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'], + days: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'], + shortDays: ['N', 'P', 'W', 'Ś', 'C', 'P', 'S'], + goToToday: 'Dziś', + prevMonthAriaLabel: 'Poprzedni miesiąc', + nextMonthAriaLabel: 'Następny miesiąć', + prevYearAriaLabel: 'Poprzedni rok', + nextYearAriaLabel: 'Następny rok', + closeButtonAriaLabel: 'Zamknij wybór daty', + isRequiredErrorMessage: 'Data początkowa jest wymagana.', + invalidInputErrorMessage: 'Nieprawidłowy format daty.' + }, + DateIntervalStrings: { + AnyTime: "Dowolny czas", + PastDay: "Ostatnie 24 godziny", + PastWeek: "Ostatni tydzień", + PastMonth: "Ostatni miesiąc", + Past3Months: "Ostatie 3 miesiące", + PastYear: "Ostatni rok", + Older: "Starsze niż rok" + }, + SameTabOpenBehavior: "Użyj bieżącej karty", + NewTabOpenBehavior: "Otwórz w nowej karcie", + PageOpenBehaviorLabel: "Sposób otwierania", + EmptyFieldErrorMessage: "To pole nie może być puste" + }, + DataSources: { + SharePointSearch: { + SourceName: "SharePoint Search", + SourceConfigurationGroupName: "Konfiguracja źródła", + QueryTextFieldLabel: "Tekst zapytania", + QueryTextFieldInfoMessage: "Użyj karty Dostępne połączenia konfiguracji składnika Web Part aby wskazać wartość statyczną lub wartość dynamiczną z komponentu na stronie, jak na przykład searchbox", + QueryTemplateFieldLabel: "Szablon zapytania", + QueryTemplatePlaceHolderText: "przykładowo: Path:{Site}", + QueryTemplateFieldDescription: "Szablon zapytania. Możesz używać {} aby zbudować dynamiczne zapytanie.", + ResultSourceIdLabel: "Identyfikator źródła wyników", + ResultSourceIdDescription: "Użyj domyślnego źródła wyników lub wpisz własny GUID i naciśnij 'Enter' aby zapisać.", + InvalidResultSourceIdMessage: "Wprowadzona wartość nie jest poprawnym GUID", + EnableQueryRulesLabel: "Włącz reguły zapytania", + IncludeOneDriveResultsLabel: "Dołączaj wyniki z OneDrive for Business", + RefinementFilters: "Filtry zawężające", + RefinementFiltersDescription: "Początkowe filtry zawężające stosowane do zapytania. Nie pojawią się one w wybranych filtrach. Dla wyrażeń tekstowych, używaj cudzysłowów (\") zamiast apostrofów (').", + EnableLocalizationLabel: "Włącz lokalizację", + EnableLocalizationOnLabel: "Włączone", + EnableLocalizationOffLabel: "Wyłączone", + QueryCultureLabel: "Język dla zapytań wyszukiwania", + QueryCultureUseUiLanguageLabel: "Użyj języka interfejsu", + SelectedPropertiesFieldLabel: "Wybrane właściwości", + SelectedPropertiesFieldDescription: "Wskaż właściwości do pobrania.", + SelectedPropertiesPlaceholderLabel: "Wybierz właściwości", + TermNotFound: "(Nie znaleziono terminu o identyfikatorze '{0}')", + ApplyQueryTemplateBtnText: "Zastosuj", + EnableAudienceTargetingTglLabel: "Włącz audiencje" + }, + MicrosoftSearch: { + QueryTextFieldLabel: "Tekst zapytania", + QueryTextFieldInfoMessage: "Użyj karty Dostępne połączenia konfiguracji składnika Web Part aby wskazać wartość statyczną lub wartość dynamiczną z komponentu na stronie, jak na przykład searchbox", + SourceName: "Microsoft Search", + SourceConfigurationGroupName: "Microsoft Search", + EntityTypesField: "Typy encji do wyszukania", + SelectedFieldsPropertiesFieldLabel: "Wybrane pola", + SelectedFieldsPropertiesFieldDescription: "Wskaż właściwości do pobrania.", + SelectedFieldsPlaceholderLabel: "Wybierz pola", + EnableTopResultsLabel: "Włącz najlepsze wyniki", + ContentSourcesFieldLabel: "Źródła zawartości", + ContentSourcesFieldDescriptionLabel: "Identyfikatory połączeń zdefiniowanych w portalu administracyjnym Microsoft Search.", + ContentSourcesFieldPlaceholderLabel: "przykładowo: 'MyCustomConnectorId'" + }, + SearchCommon: { + Sort: { + SortPropertyPaneFieldLabel: "Kolejność sortowania", + SortListDescription: "Wybierz początkowy porzdek sortowania. Możesz wskazać pole z listy rozwijalnej (tylko jeśli dane zostały już pobrane) lub wprowadzić własną wartość niestandardową (naciśnij 'Enter' aby zapisać)", + SortDirectionAscendingLabel: "Rosnąco", + SortDirectionDescendingLabel: "Malejąco", + SortErrorMessage: "Nieprawidłowa właściwość wyszukiwania (sprawdź czy właściwość jest sortowalna).", + SortPanelSortFieldLabel: "Sortowanie po polu", + SortPanelSortFieldAria: "Sortowanie po", + SortPanelSortFieldPlaceHolder: "Sortowanie po", + SortPanelSortDirectionLabel: "Kierunek sortowania", + SortDirectionColumnLabel: "Kierunek", + SortFieldColumnLabel: "Nazwa pola", + EditSortLabel: "Edytuj porządek sortowania", + SortInvalidSortableFieldMessage: "Ta właściwość nie jest sortowalna", + SortFieldColumnPlaceholder: "Wybierz pole..." + } + } + }, + Controls: { + TextDialogButtonText: "Dodaj wyrażenie Handlebars", + TextDialogTitle: "Edytuj wyrażenie Handlebars", + TextDialogCancelButtonText: "Anuluj", + TextDialogSaveButtonText: "Zapisz", + SelectItemComboPlaceHolder: "Wybierz właściwość", + AddStaticDataLabel: "Dodaj dane statyczne", + TextFieldApplyButtonText: "Zastosuj" + }, + Layouts: { + Debug: { + Name: "Diagnostyczny" + }, + Custom: { + Name: "Niestandardowy" + }, + SimpleList: { + Name: "Lista", + ShowFileIconLabel: "Pokaż ikonę pliku", + ShowItemThumbnailLabel: "Pokaż miniaturę" + }, + DetailsList: { + Name: "Lista ze szczegółami", + UseHandlebarsExpressionLabel: "Użyj wyrażenia Handlebars", + MinimumWidthColumnLabel: "Minimalna szerokość (px)", + MaximumWidthColumnLabel: "Maksymalna szerokość (px)", + SortableColumnLabel: "Sortowalne", + ResizableColumnLabel: "Skalowalne", + MultilineColumnLabel: "Wieloliniowe", + LinkToItemColumnLabel: "Łącze do elementu", + CompactModeLabel: "Tryb kompaktowy", + ShowFileIcon: "Pokaż ikonę pliku", + ManageDetailsListColumnDescription: "Dodawaj, usuwaj i aktualizuj kolumny układu listy ze szczegółami. Możesz używać wartości pól bezpośrednio bez żadnych przekształceń lub użyć wyrażeń Handlebars. HTML jest wspierany przez wszystkie pola.", + ManageDetailsListColumnLabel: "Zarządzaj kolumnami", + ValueColumnLabel: "Wartość kolumny", + DisplayNameColumnLabel: "Nazwa wyświetlana kolumny", + FileExtensionFieldLabel: "Pole używane dla rozszerzenia pliku", + GroupByFieldLabel: "Grupuj po polu", + EnableGrouping: "Grupowanie włączone", + CollapsedGroupsByDefault: "Pokaż zapadnięte", + ResetFieldsBtnLabel: "Resetuj pola do wartości domyślnych" + }, + Cards: { + Name: "Karty", + ManageTilesFieldsLabel: "Pola kart", + ManageTilesFieldsPanelDescriptionLabel: "Tutaj możesz przyporządkować wartości pól do symboli zastępczych (placeholders). Możesz używać wartości pól bezpośrednio bez żadnych przekształceń lub użyć wyrażeń Handlebars. Również możesz umieścić własny kod HTML w polach z adnotacjami.", + PlaceholderNameFieldLabel: "Nazwa", + SupportHTMLColumnLabel: "Zezwalaj na HTML", + PlaceholderValueFieldLabel: "Wartość", + UseHandlebarsExpressionLabel: "Użyj wyrażenia Handlebars", + EnableItemPreview: "Włącz podgląd wyniku", + EnableItemPreviewHoverMessage: "Włączenie tej opcji może mieć skutki wydajnościowe jeśli będzie widocznych zbyt wiele elementów używających slotu 'AutoPreviewUrl'. Rekomenduje się użyte tej opcji tylko dl małych ilości elementów lub użycie predefiniowanych URL podglądu ze źródła danych w slotach.", + ShowFileIcon: "Pokaż ikonę pliku", + CompactModeLabel: "Tryb kompaktowy", + PreferedCardNumberPerRow: "Preferowana liczba kart na wiersz", + Fields: { + Title: "Tytuł", + Location: "Lokalizacja", + Tags: "Tagi", + PreviewImage: "Obraz podglądu", + PreviewUrl: "URL podglądu", + Url: "URL", + Date: "Data", + Author: "Autor", + ProfileImage: "URL obrazu profilu", + FileExtension: "Rozszerzenie pliku", + IsContainer: "Jest folderem" + }, + ResetFieldsBtnLabel: "Resetuj pola do wartości domyślnych" + }, + Slider: { + Name: "Slajder", + SliderAutoPlay: "Autoodtwarzanie", + SliderAutoPlayDuration: "Czas autoodtwarzania (w sekundach)", + SliderPauseAutoPlayOnHover: "Pauza podczas wskazania", + SliderGroupCells: "Liczba elementów grupowanych na slajdach", + SliderShowPageDots: "Pokaż kropki", + SliderWrapAround: "Nieskończone przewijanie", + SlideHeight: "Wysokość slajdu (w pikselach)", + SlideWidth: "Szerokość slajdu (w pikselach)" + }, + People: { + Name: "Osoba", + ManagePeopleFieldsLabel: "Zarządzaj polami", + ManagePeopleFieldsPanelDescriptionLabel: "Tutaj możesz przyporządkować wartości pól do symboli zastępczych (placeholders). Możesz używać wartości pól bezpośrednio bez żadnych przekształceń lub użyć wyrażeń Handlebars.", + PlaceholderNameFieldLabel: "Nazwa", + PlaceholderValueFieldLabel: "Wartość", + UseHandlebarsExpressionLabel: "Użyj wyrażenia Handlebars", + PersonaSizeOptionsLabel: "Rozmiar komponentu", + PersonaSizeExtraSmall: "Bardzo mały", + PersonaSizeSmall: "Mały", + PersonaSizeRegular: "Standardowy", + PersonaSizeLarge: "Duży", + PersonaSizeExtraLarge: "Bardzo duży", + ShowInitialsToggleLabel: "Pokaż inicjały jeśli zdjęcie nie jest dostępne", + SupportHTMLColumnLabel: "Zezwalaj na HTML", + ResetFieldsBtnLabel: "Resetuj pola do wartości domyślnych", + ShowPersonaCardOnHover: "Pokaż kartę po wskazaniu", + ShowPersonaCardOnHoverCalloutMsg: "Ta funkcja używa Microsoft Graph aby wyświetlić informacje o użytkowniku i wymaga następujcych uprawnień API: ['User.Read','People.Read','Contacts.Read','User.ReadBasic.All'].", + Fields: { + ImageUrl: "URL obrazu", + PrimaryText: "Tekst podstawowy", + SecondaryText: "Tekst drugorzędny", + TertiaryText: "Tekst trzeciorzędny", + OptionalText: "Tekst opcjonalny" + } + }, + Vertical: { + Name: "Pionowo" + }, + Horizontal: { + Name: "Poziomo", + PreferedFilterNumberPerRow: "Preferowana liczba filtrów na wiersz", + }, + Panel: { + Name: "Panel", + IsModal: "Modalny", + IsLightDismiss: "Lekkie odrzucenie", + Size: "Rozmiar panelu", + ButtonLabel: "Pokaż filtry", + ButtonLabelFieldName: "Etykieta przycisku", + HeaderText: "Filtry", + HeaderTextFieldName: "Tekst nagłówka panelu", + SizeOptions: { + SmallFixedFar: 'Małe (domyślnie)', + SmallFixedNear: 'Małe, blisko strony', + Medium: 'Średnie', + Large: 'Duże', + LargeFixed: 'Duże (stały rozmiar)', + ExtraLarge: 'Bardzo duże', + SmallFluid: 'Pełna szerokość (płynnie)' + } + } + }, + HandlebarsHelpers: { + CountMessageLong: "{0} wyników dla '{1}'", + CountMessageShort: "{0} wyników", + }, + PropertyPane: { + ConnectionsPage: { + DataConnectionsGroupName: "Dostępne połączenia" + }, + InformationPage: { + Extensibility: { + GroupName: "Konfiguracja rozszerzalności", + FieldLabel: "Używane biblioteki rozszerzalności", + ManageBtnLabel: "Konfiguruj", + Columns: { + Name: "Nazwa/Cel", + Id: "GUID manifestu", + Enabled: "Włączone/Wyłączone" + } + } + } + }, + Filters: { + ApplyAllFiltersButtonLabel: "Zastosuj", + ClearAllFiltersButtonLabel: "Wyczyść", + FilterNoValuesMessage: "Brak wartości dla tego filtra", + OrOperator: "LUB", + AndOperator: "ORAZ", + ComboBoxPlaceHolder: "Wybierz wartość" + }, + SuggestionProviders: { + SharePointStatic: { + ProviderName: "SharePoint Static search suggestions", + ProviderDescription: "Pobieranie sugestii wyszukiwania SharePoint zdefiniowanych przez użytkownika" + } + } + } +}) diff --git a/search-parts/src/loc/sv-SE.js b/search-parts/src/loc/sv-SE.js index bb6634c86..8fb3569ba 100644 --- a/search-parts/src/loc/sv-SE.js +++ b/search-parts/src/loc/sv-SE.js @@ -17,7 +17,7 @@ define([], function () { InvalidtokenFormatErrorMessage: "Vänligen ange ett teckenformat som använder sig av '{' och '}'. (t.ex: {Today})" }, Date: { - DateTokensGroupName: "Datum tecken", + DateTokensGroupName: "Datumtecken", Today: "Idag", Yesterday: "Igår", Tomorrow: "Imorgon", @@ -26,13 +26,13 @@ define([], function () { OneYearAgo: "Ett år sedan" }, Page: { - PageTokensGroupName: "Sidotecken", + PageTokensGroupName: "Sidtecken", PageId: "Sidans ID", PageTitle: "Sidans titel", PageCustom: "Annan sidkolumn", }, User: { - UserTokensGroupName: "Anvädartecken", + UserTokensGroupName: "Användartecken", UserName: "Användarnamn", Me: "Jag", UserDepartment: "Användaravdelning", @@ -93,7 +93,7 @@ define([], function () { }, DataSources: { SharePointSearch: { - SourceName: "SharePoint sök", + SourceName: "SharePoint-sök", SourceConfigurationGroupName: "Källkonfiguration", QueryTextFieldLabel: "Sökfrågetext", QueryTextFieldInfoMessage: "Använd konfigurationsfliken i webbdelen Tillgängliga anslutningar för att ange antingen ett statiskt värde eller ett värde från en dynamisk komponent på sidan, till exempel en sökruta.", @@ -106,7 +106,7 @@ define([], function () { EnableQueryRulesLabel: "Aktivera frågeregler", IncludeOneDriveResultsLabel: "Inkludera resultat från OneDrive för Företag", RefinementFilters: "Förfiningsfilter", - RefinementFiltersDescription: "Inledande förfiningsfilter som kan användas i en fråga. Dessa vissas inte i de valda filtren. Om du vill infoga text använder du citattecken (\") istället för (').", + RefinementFiltersDescription: "Inledande förfiningsfilter som kan användas i en fråga. Dessa visas inte i de valda filtren. Om du vill infoga text använder du citattecken (\") istället för (').", EnableLocalizationLabel: "Aktivera lokalisering", EnableLocalizationOnLabel: "På", EnableLocalizationOffLabel: "Av", @@ -122,8 +122,8 @@ define([], function () { MicrosoftSearch: { QueryTextFieldLabel: "Sökfrågetext", QueryTextFieldInfoMessage: "Använd konfigurationsfliken i webbdelen Tillgängliga anslutningar för att ange antingen ett statiskt värde eller ett värde från en dynamisk komponent på sidan, till exempel en sökruta.", - SourceName: "Microsoft sök", - SourceConfigurationGroupName: "Microsoft sök", + SourceName: "Microsoft-sök", + SourceConfigurationGroupName: "Microsoft-sök", EntityTypesField: "Sökbara enhetstyper", SelectedFieldsPropertiesFieldLabel: "Valda fält", SelectedFieldsPropertiesFieldDescription: "Anger fälten som ska hämtas från sökresultaten.", @@ -136,16 +136,16 @@ define([], function () { SearchCommon: { Sort: { SortPropertyPaneFieldLabel: "Sorteringsordning", - SortListDescription: "Ange den första sorteringsordningen för sökresultaten. Du kan antingen välja ett fält i listrutan (endast om datakällan redan har hämtats) eller skriv ditt eget anpassade värde (tryck på 'Enter' för att spara)", + SortListDescription: "Ange den första sorteringsordningen för sökresultaten. Du kan antingen välja ett fält i rullistan (endast om datakällan redan har hämtats) eller skriv ditt eget anpassade värde (tryck på 'Enter' för att spara)", SortDirectionAscendingLabel: "Stigande", SortDirectionDescendingLabel: "Fallande", SortErrorMessage: "Ogiltig sökegenskap (Kontrollera om den hanterade egenskapen är sorterbar).", SortPanelSortFieldLabel: "Sortera efter fält", SortPanelSortFieldAria: "Sortera efter", SortPanelSortFieldPlaceHolder: "Sortera efter", - SortPanelSortDirectionLabel: "Sortering riktning", + SortPanelSortDirectionLabel: "Sorteringsriktning", SortDirectionColumnLabel: "Riktning", - SortFieldColumnLabel: "Fält namn", + SortFieldColumnLabel: "Fältnamn", EditSortLabel: "Redigera sorteringsordning", SortInvalidSortableFieldMessage: "Den här egenskapen kan inte sorteras", SortFieldColumnPlaceholder: "Välj fält..." @@ -153,8 +153,8 @@ define([], function () { } }, Controls: { - TextDialogButtonText: "Lägg till Handlebars-uttryck", - TextDialogTitle: "Redigera Handlebars-uttryck", + TextDialogButtonText: "Lägg till Handlebars", + TextDialogTitle: "Redigera Handlebars", TextDialogCancelButtonText: "Avbryt", TextDialogSaveButtonText: "Spara", SelectItemComboPlaceHolder: "Välj egenskap", @@ -175,16 +175,16 @@ define([], function () { }, DetailsList: { Name: "Detaljerad lista", - UseHandlebarsExpressionLabel: "Använd Handlebars-uttryck", - MinimumWidthColumnLabel: "Minimum bredd (px)", - MaximumWidthColumnLabel: "Maximum bredd (px)", + UseHandlebarsExpressionLabel: "Använd Handlebars", + MinimumWidthColumnLabel: "Minimal bredd (px)", + MaximumWidthColumnLabel: "Maximal bredd (px)", SortableColumnLabel: "Sorterbar", ResizableColumnLabel: "Storleken kan redigeras", MultilineColumnLabel: "Flera linjer", LinkToItemColumnLabel: "Länk till artikel", CompactModeLabel: "Kompakt läge", ShowFileIcon: "Visa filikon", - ManageDetailsListColumnDescription: "Lägg till, uppdatera eller ta bort kolumner från layouten i detaljlistan. Du kan antingen använda egenskapsvärden i listan direkt utan någon transformation, eller så kan du använda ett styruttryck som fältets värde. HTML stöds för användning i alla fält.", + ManageDetailsListColumnDescription: "Lägg till, uppdatera eller ta bort kolumner från layouten i detaljlistan. Du kan antingen använda egenskapsvärden i listan direkt utan någon omvandling, eller så kan du använda ett styruttryck som fältets värde. HTML stöds för användning i alla fält.", ManageDetailsListColumnLabel: "Hantera kolumner", ValueColumnLabel: "Kolumnvärde", ValueSortingColumnLabel: "Kolumnvärde sortering", @@ -198,13 +198,13 @@ define([], function () { Cards: { Name: "Kort", ManageTilesFieldsLabel: "Hantera kortfält", - ManageTilesFieldsPanelDescriptionLabel: "Här kan du mappa varje fältvärde med motsvarande kortplatshållare. Du kan antingen använda en resultategenskap direkt utan någon transformation, eller så kan du använda ett Handlebars-uttryck som fältets värde. När du har angett kan du klistra in din egen HTML-kod i kommenterade fält.", + ManageTilesFieldsPanelDescriptionLabel: "Här kan du mappa varje fältvärde med motsvarande kortplatshållare. Du kan antingen använda en resultategenskap direkt utan någon omvandling, eller så kan du använda Handlebars för fältets värde. När du har angett kan du klistra in din egen HTML-kod i kommenterade fält.", PlaceholderNameFieldLabel: "Namn", SupportHTMLColumnLabel: "Tillåt HTML", PlaceholderValueFieldLabel: "Värde", - UseHandlebarsExpressionLabel: "Använd Handlebars-uttryck", + UseHandlebarsExpressionLabel: "Använd Handlebars", EnableItemPreview: "Tillåt förhandsgranskning av resultatet", - EnableItemPreviewHoverMessage: "Att aktivera den här funktionen kan påverka prestandan om för många objekt visas samtidigt och du använder fältet 'AutoPreviewUrl'. Vi rekommenderar att du använder det här alternativet med få objekt, eller genom att använda fördefinierade förhandsgranskningar av URL:er från datakällas fält i platser.", + EnableItemPreviewHoverMessage: "Att aktivera den här funktionen kan påverka prestandan om för många objekt visas samtidigt och du använder fältet 'AutoPreviewUrl'. Vi rekommenderar att du använder det här alternativet med få objekt, eller genom att använda fördefinierade förhandsgranskningar av URL:er från datakällans fält i platser.", ShowFileIcon: "Visa filikon", CompactModeLabel: "Kompakt läge", PreferedCardNumberPerRow: "Önskat antal kort per rad", @@ -213,34 +213,34 @@ define([], function () { Location: "Plats", Tags: "Taggar", PreviewImage: "Förhandsgranskning av bild", - PreviewUrl: "Förhandsgranskning av Url", - Url: "Url", + PreviewUrl: "Förhandsgranskning av URL", + Url: "URL", Date: "Datum", Author: "Författare", - ProfileImage: "Url för profilbild", + ProfileImage: "URL för profilbild", FileExtension: "Filändelsen", IsContainer: "Är mapp" }, ResetFieldsBtnLabel: "Återställ fält till standardvärden" }, Slider: { - Name: "Slider", + Name: "Reglage", SliderAutoPlay: "Automatisk uppspelning", SliderAutoPlayDuration: "Varaktighet för automatisk uppspelning (i sekunder)", SliderPauseAutoPlayOnHover: "Pausa genom att föra musen över", - SliderGroupCells: "Antalet element som ska grupperas i slides", + SliderGroupCells: "Antalet element som ska grupperas inom ett reglage", SliderShowPageDots: "Visa sidpunkter", SliderWrapAround: "Oändlig scroll", - SlideHeight: "Slide höjd (i px)", - SlideWidth: "Slide bredd (i px)" + SlideHeight: "Reglagehöjd (px)", + SlideWidth: "Reglagebredd (px)" }, People: { Name: "Person", ManagePeopleFieldsLabel: "Hantera fält för personer", - ManagePeopleFieldsPanelDescriptionLabel: "Här kan du mappa varje fältvärde med motsvarande person-placeholder. Du kan antingen använda datakällans fältvärde direkt utan någon omvandling, eller så kan du använda ett styruttryck i värdefältet.", + ManagePeopleFieldsPanelDescriptionLabel: "Här kan du koppla varje fältvärde med motsvarande person-platshållare. Du kan antingen använda datakällans fältvärde direkt utan någon omvandling, eller så kan du använda ett styruttryck i värdefältet.", PlaceholderNameFieldLabel: "Namn", PlaceholderValueFieldLabel: "Värde", - UseHandlebarsExpressionLabel: "Använd Handlebars-uttryck", + UseHandlebarsExpressionLabel: "Använd Handlebars", PersonaSizeOptionsLabel: "Komponentstorlek", PersonaSizeExtraSmall: "Extra liten", PersonaSizeSmall: "Liten", @@ -319,7 +319,7 @@ define([], function () { SuggestionProviders: { SharePointStatic: { ProviderName: "SharePoint statiska sökförslag", - ProviderDescription: "Hämta SharePoint statiska användadefinierade sökförslag" + ProviderDescription: "Hämta SharePoint statiska användardefinierade sökförslag" } } } diff --git a/search-parts/src/webparts/searchBox/SearchBoxWebPart.manifest.json b/search-parts/src/webparts/searchBox/SearchBoxWebPart.manifest.json index 481ce14ec..42dd58711 100644 --- a/search-parts/src/webparts/searchBox/SearchBoxWebPart.manifest.json +++ b/search-parts/src/webparts/searchBox/SearchBoxWebPart.manifest.json @@ -16,11 +16,13 @@ }, "title": { "default": "PnP - Search Box", - "fr-fr": "PnP - Boîte de recherche" + "fr-fr": "PnP - Boîte de recherche", + "pl-pl": "PnP - Pole Wyszukiwania" }, "description": { "default": "Allows users to search data source results using query text", - "fr-fr": "Permet aux utilisateurs de rechercher dans un source de données sur la base d'une requête textuelle" + "fr-fr": "Permet aux utilisateurs de rechercher dans un source de données sur la base d'une requête textuelle", + "pl-pl": "Pozwala użytkownikom na wprowadzenie tekstu wyszukiwania" }, "officeFabricIconFontName": "Search", "properties": { diff --git a/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts b/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts index 7a67de5ca..5811b1cd6 100644 --- a/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts +++ b/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts @@ -144,7 +144,9 @@ export default class SearchBoxWebPart extends BaseWebPart { onUpdate(field.id, checked); - } + }, + offText: commonStrings.General.OffTextLabel, + onText: commonStrings.General.OnTextLabel }) ) ); diff --git a/search-parts/src/webparts/searchBox/components/SearchBoxAutoComplete/SearchBoxAutoComplete.tsx b/search-parts/src/webparts/searchBox/components/SearchBoxAutoComplete/SearchBoxAutoComplete.tsx index 5f4b24fa0..cd26c5b20 100644 --- a/search-parts/src/webparts/searchBox/components/SearchBoxAutoComplete/SearchBoxAutoComplete.tsx +++ b/search-parts/src/webparts/searchBox/components/SearchBoxAutoComplete/SearchBoxAutoComplete.tsx @@ -35,7 +35,7 @@ export default class SearchBoxAutoComplete extends React.Component { @@ -97,6 +100,11 @@ export default class SearchFiltersContainer extends React.Component { - - const updatedFilter = cloneDeep(selectedFilter); - updatedFilter.values = []; - return updatedFilter; - }); - + const updatedfilters = this.resetSelectedFilterValues(this.state.currentUiFilters); const submittedFilters = this.getSelectedFiltersFromUIFilters(updatedfilters); this.getFiltersToDisplay(this.props.availableFilters, [], this.props.filtersConfiguration); + this.resetFiltersDeepLink(); + this.props.onUpdateFilters(submittedFilters); } @@ -348,10 +352,19 @@ export default class SearchFiltersContainer extends React.Component { - // Send only selected filters to the data source - this.props.onUpdateFilters(submittedFilters); + // Send only selected filters to the data source + this.props.onUpdateFilters(submittedFilters); + + // Set the filter links in URL + this.setFiltersDeepLink(submittedFilters); + + // Force a UI refresh is the submitted filters come from 'Apply' button to get the correct disabled/active state set + if (filterConfiguration.isMulti) { + this.forceUpdate(); + } + }); } this.getFiltersToDisplay(this.props.availableFilters, currentUiFilters, this.props.filtersConfiguration); @@ -439,6 +452,9 @@ export default class SearchFiltersContainer extends React.Component { + + const filterConfiguration = DataFilterHelper.getConfigurationForFilter(filter, this.props.filtersConfiguration); + + return { + displayName: filterConfiguration.displayValue ? filterConfiguration.displayValue : filter.filterName, + expandByDefault: filterConfiguration.expandByDefault, + filterName: filter.filterName, + isMulti: filterConfiguration.isMulti, + selectedTemplate: filterConfiguration.selectedTemplate, + showCount: filterConfiguration.showCount, + selectedOnce: true, + operator: filter.operator, + values: filter.values.map((value: IDataFilterValueInternal )=> { + value.selected = true; + value.selectedOnce = true; + return value; + }), + canApply: false, + canClear: true + } as IDataFilterInternal; + }); + + // Update the connected data source (if applicable) + this.props.onUpdateFilters(dataFilters); + + // Update selected filters in the UI + this.setState({ + currentUiFilters: currentUiFilters, + submittedFilters: dataFilters + }); + + } catch (e) { + Log.verbose(`[SearchFiltersContainer.getFiltersDeepLink]`, `Filters format in the query string is invalid.`); + } + } + } + + /** + * Set the current selected filters as query string in the URL for deep linking + * @param submittedFilters the current submitted filters + */ + private setFiltersDeepLink(submittedFilters: IDataFilter[]) { + + let filtersDeepLinkUrl: string; + if (submittedFilters.length > 0) { + filtersDeepLinkUrl = UrlHelper.addOrReplaceQueryStringParam(window.location.href, DEEPLINK_QUERYSTRING_PARAM, JSON.stringify(submittedFilters)); + } else { + filtersDeepLinkUrl = UrlHelper.removeQueryStringParam(DEEPLINK_QUERYSTRING_PARAM, window.location.href); + } + + window.history.pushState({ path: filtersDeepLinkUrl },'', filtersDeepLinkUrl); + } + + private resetFiltersDeepLink() { + // Reset filters query string + const filtersDeepLinkUrl = UrlHelper.removeQueryStringParam(DEEPLINK_QUERYSTRING_PARAM, window.location.href); + window.history.pushState({ path: filtersDeepLinkUrl },'', filtersDeepLinkUrl); + } + + /** + * Subscribes to URL query string change events using SharePoint page router + */ + private _handleQueryStringChange() { + + // When the browser 'back' or 'forward' button is pressed + window.onpopstate = (ev) => { + + const queryString = UrlHelper.getQueryStringParam(DEEPLINK_QUERYSTRING_PARAM, window.location.href); + + // Initial state where no filter are selected + if (!queryString) { + + this.setState({ + currentUiFilters: this.resetSelectedFilterValues(this.state.currentUiFilters), + submittedFilters: [] + }); + + // Notify connected Web Parts + this.props.onUpdateFilters([]); + } + + this.getFiltersDeepLink(); + }; + } + + private resetSelectedFilterValues(currentUiFilters: IDataFilterInternal[]): IDataFilterInternal[] { + + const updatedfilters = currentUiFilters.map(selectedFilter => { + const updatedFilter = cloneDeep(selectedFilter); + updatedFilter.values = []; + return updatedFilter; + }); + + return updatedfilters; + } } diff --git a/search-parts/src/webparts/searchFilters/loc/pl-pl.js b/search-parts/src/webparts/searchFilters/loc/pl-pl.js new file mode 100644 index 000000000..a5efbd918 --- /dev/null +++ b/search-parts/src/webparts/searchFilters/loc/pl-pl.js @@ -0,0 +1,69 @@ +define([], function() { + return { + General: { + PlaceHolder: { + EditLabel: "Edytuj", + IconText: "Filtry Wyszukiwania by @PnP", + Description: "Pokazuj filtry z powiązanego składnika wyników wyszukiwania", + ConfigureBtnLabel: "Konfiguruj" + }, + NoAvailableFilterMessage: "Brak dostępnych filtrów do wyświetlenia.", + WebPartDefaultTitle: "Web Part Filtry Wyszukiwania" + }, + PropertyPane: { + ConnectionsPage: { + UseDataResultsWebPartLabel: "Połącz z wynikami Web Parta", + UseDataResultsFromComponentsLabel: "Użyj danych z następujących Web Partów", + UseDataResultsFromComponentsDescription: "Jeśli połączysz więcej niż jeden Web Part, wartości filtrów i liczność będzie połączona po nazwach filtrów.", + }, + FiltersSettingsPage: { + SettingsGroupName: "Ustawienia filtrów", + FilterOperator: "Operator używany pomiędzy filtrami" + }, + DataFilterCollection: { + SelectFilterComboBoxLabel: "Wybierz pole", + FilterNameLabel: "Filter field", + FilterMaxBuckets: "# wartości", + FilterDisplayName: "Tytuł", + FilterTemplate: "Szablon", + FilterExpandByDefault: "Domyślnie rozwinięte", + FilterType: "Rodzaj filtru", + FilterTypeRefiner: "Ten szablon filtru działa jak zawężacz i odbiera/wysyła dostępne/wybrane wartości z/do połączonego źródła danych.", + FilterTypeStaticFilter: "Ten szablon filtru działa jak statyczny filtr i jedynie wysyła z góry wybraną wartość do połączonego źródła danych. Przychodzące wartości filtrów nie są brane pod uwagę.", + CustomizeFiltersBtnLabel: "Edytuj", + CustomizeFiltersHeader: "Edytuj filtry", + CustomizeFiltersDescription: "Konfiguruj filtry wyszukiwania dodając i usuwając wiersze. Możesz wybrać pola z wyników źródła wyszukiwania lub użyć stałych wartości filtrów.", + CustomizeFiltersFieldLabel: "Zmodyfikuj filtry", + ShowCount: "Pokaż liczność", + Operator: "Operator pomiędzy wartościami", + ANDOperator: "ORAZ", + OROperator: "LUB", + IsMulti: "Wiele wartości", + Templates: { + CheckBoxTemplate: "Pole tak/nie", + DateRangeTemplate: "Daty od/do", + ComboBoxTemplate: "Pole rozwijalne", + DateIntervalTemplate: "Okres czasu", + TaxonomyPickerTemplate: "Wybór terminu" + }, + SortBy: "Sortuj po", + SortDirection: "Kierunek sortowania", + SortByName: "Po nazwie", + SortByCount: "Po liczności", + SortAscending: "Rosnąco", + SortDescending: "Malejąco" + }, + LayoutPage: { + AvailableLayoutsGroupName: "Dostępne układy", + LayoutTemplateOptionsGroupName: "Ustawienia układu", + TemplateUrlFieldLabel: "Użyj adresu URL zewnętrznego szablonu", + TemplateUrlPlaceholder: "https://myfile.html", + ErrorTemplateExtension: "Szablon musi by poprawnym plikiem .htm lub .html", + ErrorTemplateResolve: "Nie można rozwiązać wskazanego szablonu. Szczegóły błędu: '{0}'", + FiltersTemplateFieldLabel: "Edytuj filtry szablonu", + FiltersTemplatePanelHeader: "Edytuj filtry szablonu" + }, + ImportExport: "Importuj / Eksportuj ustawienia" + } + } +}); \ No newline at end of file diff --git a/search-parts/src/webparts/searchFilters/loc/sv-SE.js b/search-parts/src/webparts/searchFilters/loc/sv-SE.js index 0f53b2f74..bd9cfa4db 100644 --- a/search-parts/src/webparts/searchFilters/loc/sv-SE.js +++ b/search-parts/src/webparts/searchFilters/loc/sv-SE.js @@ -4,7 +4,7 @@ define([], function() { PlaceHolder: { EditLabel: "Redigera", IconText: "Sökfilter av @PnP", - Description: "Visar datafilter från ett anslutet sökresultats webbdel", + Description: "Visar datafilter från ansluten webbdel för sökresultat", ConfigureBtnLabel: "Konfigurera" }, NoAvailableFilterMessage: "Inget tillgängligt filter att visa.", diff --git a/search-parts/src/webparts/searchResults/SearchResultsWebPart.manifest.json b/search-parts/src/webparts/searchResults/SearchResultsWebPart.manifest.json index 50e9743c8..4defab962 100644 --- a/search-parts/src/webparts/searchResults/SearchResultsWebPart.manifest.json +++ b/search-parts/src/webparts/searchResults/SearchResultsWebPart.manifest.json @@ -18,11 +18,13 @@ }, "title": { "default": "PnP - Search Results", - "fr-fr": "PnP - Résultats de recherche" + "fr-fr": "PnP - Résultats de recherche", + "pl-pl": "PnP - Wyniki wyszukiwania" }, "description": { "default": "Displays JSON based data using customizable templates", - "fr-fr": "Affiche des données de multiples source de données au format JSON selon des modèles d'affichage personnalisables." + "fr-fr": "Affiche des données de multiples source de données au format JSON selon des modèles d'affichage personnalisables.", + "pl-pl": "Wyświetla dane typu JSON używając konfigurowalnych szablonów" }, "officeFabricIconFontName": "SearchAndApps", "properties": { diff --git a/search-parts/src/webparts/searchResults/SearchResultsWebPart.ts b/search-parts/src/webparts/searchResults/SearchResultsWebPart.ts index f3d0f75dc..27b8b1736 100644 --- a/search-parts/src/webparts/searchResults/SearchResultsWebPart.ts +++ b/search-parts/src/webparts/searchResults/SearchResultsWebPart.ts @@ -59,6 +59,7 @@ import { IDataVerticalSourceData } from '../../models/dynamicData/IDataVerticalS import { BaseWebPart } from '../../common/BaseWebPart'; import { ApplicationInsights } from '@microsoft/applicationinsights-web'; import commonStyles from '../../styles/Common.module.scss'; +import { UrlHelper } from '../../helpers/UrlHelper'; const LogSource = "SearchResultsWebPart"; @@ -290,6 +291,7 @@ export default class SearchResultsWebPart extends BaseWebPart}}`.", + SlotNameFieldName: "Nazwa slotu", + SlotFieldFieldName: "Pole slotu", + SlotFieldPlaceholderName: "Wybierz pole" + } + }, + LayoutPage: { + LayoutSelectionGroupName: "Dostępne układy", + LayoutTemplateOptionsGroupName: "Ustawienia układu", + CommonOptionsGroupName: "Ogólne", + TemplateUrlFieldLabel: "Użyj adresu URL zewnętrznego szablonu", + TemplateUrlPlaceholder: "https://myfile.html", + ErrorTemplateExtension: "Szablon musi by poprawnym plikiem .htm lub .html", + ErrorTemplateResolve: "Nie można rozwiązać wskazanego szablonu. Szczegóły błędu: '{0}'", + DialogButtonLabel: "Edytuj szablon wyników", + DialogTitle: "Edytuj szablon wyników", + ShowSelectedFilters: "Pokaż wybrane filtry", + ShowBlankIfNoResult: "Ukryj ten składnik Web Part jeśli nie ma wyników", + ShowResultsCount: "Pokaż liczbę wyników", + UseMicrosoftGraphToolkit: "Użyj Microsoft Graph Toolkit", + ResultTypes: { + ResultTypeslabel: "Rodzaje wyników", + ResultTypesDescription: "Dodaj tutaj szablony dla znalezionych elementów stosowanych pod jednym lub wieloma warunkami. Warunki są obliczane w zadanej kolejności a zewnętrzne szablony mają pierwszeństwo przez szablonami inline. Upewnij się, że pola źródła wyników są widoczne w odpowiedzi.", + InlineTemplateContentLabel: "Szablon inline", + EditResultTypesLabel: "Edytuje typy wyników", + ConditionPropertyLabel: "Pole źródła danych", + ConditionValueLabel: "Wartość warunku", + CondtionOperatorValue: "Operator", + ExternalUrlLabel: "Adres URL zewnętrznego szablonu", + EqualOperator: "Równe", + NotEqualOperator: "Różne", + ContainsOperator: "Zawiera", + StartsWithOperator: "Zaczyna się od", + NotNullOperator: "Nie puste", + GreaterOrEqualOperator: "Większe lub równe", + GreaterThanOperator: "Większe niż", + LessOrEqualOperator: "Mniejsze lub równe", + LessThanOperator: "Mniejsze niż", + CancelButtonText: "Anuluj", + DialogButtonText: "Edytuj szablon", + DialogTitle: "Edytuj szablon wyników", + SaveButtonText: "Zapisz" + } + }, + ConnectionsPage: { + ConnectionsPageGroupName: "Dostępne połączenia", + UseFiltersWebPartLabel: "Połącz ze składnikiem Web Part filtrowania", + UseFiltersFromComponentLabel: "Użyj filtrów z tego komponentu", + UseSearchVerticalsWebPartLabel: "Połącz ze składnikiem Web Part Wertykały", + UseSearchVerticalsFromComponentLabel: "Użyj wertykałów z tego komponentu", + LinkToVerticalLabel: "Pokaż dane tylko jeśli następujący wertykał jest wybrany", + LinkToVerticalLabelHoverMessage: "Wyniki będą wyświetlany tylko gdy wybrany wertykał będzie pasował do skonfigurowanego dla tego składnika Web Part. W przeciwnym przypadku pozostanie pusty w trybie wyświetlania.", + UseInputQueryText: "Użyj wejściowego tekstu zapytania", + UseInputQueryTextHoverMessage: "Użyj tokenu {searchQueryText} w źródle danych aby pozyskać tą wartość", + SearchQueryTextFieldLabel: "Tekst zapytania", + SearchQueryTextFieldDescription: "", + SearchQueryPlaceHolderText: "Wprowadź zapytanie...", + InputQueryTextStaticValue: "Wartość statyczna", + InputQueryTextDynamicValue: "Wartość dynamiczna", + SearchQueryTextUseDefaultQuery: "Użyj wartości domyślnej", + SearchQueryTextDefaultValue: "Wartość domyślna" + }, + InformationPage: { + Extensibility: { + PanelHeader: "Konfiguruj biblioteki rozszerzalności ładowane przy starcie.", + PanelDescription: "Dodaj/Usuń identyfikatory niestandardowych bibliotek rozszerzalności. Wybierz nazwę i zdecyduj czy mają być ładowane przy starcie. Tylko niestandardowe źródł danych, układy, komponenty web i Handlebars będą tutaj ładowani.", + } + }, + ImportExport: "Importuj / Eksportuj ustwienia" + } + } +}); \ No newline at end of file diff --git a/search-parts/src/webparts/searchResults/loc/sv-SE.js b/search-parts/src/webparts/searchResults/loc/sv-SE.js index 6804006cb..fefcaeae2 100644 --- a/search-parts/src/webparts/searchResults/loc/sv-SE.js +++ b/search-parts/src/webparts/searchResults/loc/sv-SE.js @@ -23,18 +23,18 @@ define([], function() { HideFirstLastPagesFieldName: "Dölj första/sista navigeringsknapparna", HideDisabledFieldName: "Dölj navigeringsval (föregående, nästa, första, sista) om de är inaktiverade.", TemplateSlots: { - GroupName: "Layout slots", - ConfigureSlotsLabel: "Redigera layout-slots för den här datakällan", + GroupName: "Layout", + ConfigureSlotsLabel: "Redigera layout för den här datakällan", ConfigureSlotsBtnLabel: "Anpassa", - ConfigureSlotsPanelHeader: "Layout slots", - ConfigureSlotsPanelDescription: "Här kan du lägga till slots som ska användas för de olika layouterna. En slot är en platshållarvariabel som du infogar i din mall, där värdet kommer att ersättas med ett fältvärde från en datakälla. På så sätt blir dina mallar mer generiska och lättare att återanvända. Om du vill använda dem använder du `{{slot item @root.slots.}}` Handlebars-uttrycket.", - SlotNameFieldName: "Slot namn", - SlotFieldFieldName: "Slot fält", + ConfigureSlotsPanelHeader: "Layout", + ConfigureSlotsPanelDescription: "Här kan du lägga till namn och fält som ska användas för de olika layouterna. Ett fält är en platshållarvariabel som du infogar i din mall, där värdet kommer att ersättas med ett fältvärde från en datakälla. På så sätt blir dina mallar mer generiska och lättare att återanvända. Om du vill använda dem använder du `{{slot item @root.slots.}}` Handlebars-uttrycket.", + SlotNameFieldName: "Namn", + SlotFieldFieldName: "Fält", SlotFieldPlaceholderName: "Välj ett fält" } }, LayoutPage: { - LayoutSelectionGroupName: "Tillgängliga layouts", + LayoutSelectionGroupName: "Tillgängliga layouter", LayoutTemplateOptionsGroupName: "Layoutalternativ", CommonOptionsGroupName: "Vanlig", TemplateUrlFieldLabel: "Använd en extern URL för mall", diff --git a/search-parts/src/webparts/searchVerticals/SearchVerticalsWebPart.manifest.json b/search-parts/src/webparts/searchVerticals/SearchVerticalsWebPart.manifest.json index c250fd85e..375aa93b0 100644 --- a/search-parts/src/webparts/searchVerticals/SearchVerticalsWebPart.manifest.json +++ b/search-parts/src/webparts/searchVerticals/SearchVerticalsWebPart.manifest.json @@ -17,11 +17,13 @@ }, "title": { "default": "PnP - Search Verticals", - "fr-fr": "PnP - Verticaux de recherche" + "fr-fr": "PnP - Verticaux de recherche", + "pl-pl": "PnP - Wertykały wyszukiwania" }, "description": { "default": "Allows to browse data as verticals (i.e silos)", - "fr-fr": "Permet de parcourir les données de manière verticale (en silos)" + "fr-fr": "Permet de parcourir les données de manière verticale (en silos)", + "pl-pl": "Pozwala przeglądać dane wertykalnie" }, "officeFabricIconFontName": "Sections", "properties": { diff --git a/search-parts/src/webparts/searchVerticals/loc/pl-pl.js b/search-parts/src/webparts/searchVerticals/loc/pl-pl.js new file mode 100644 index 000000000..9f3d90357 --- /dev/null +++ b/search-parts/src/webparts/searchVerticals/loc/pl-pl.js @@ -0,0 +1,24 @@ +define([], function() { + return { + General: { + WebPartDefaultTitle: "Web Part Wertykały" + }, + PropertyPane: { + SearchVerticalsGroupName: "Konfiguracja Wertykałów", + Verticals: { + PropertyLabel: "Wertykały", + PanelHeader: "Konfiguruj wertykały", + PanelDescription: "Dodaj nowy wertykał aby umożliwić wyszukiwanie w zadanym zakresie lub źródle.", + ButtonLabel: "Konfiguruj wertykały", + Fields: { + TabName: "Nazwa karty", + IconName: "Nazwa ikony Fluent UI", + IsLink: "Jest hiperłączem", + LinkUrl: "Łącze URL", + OpenBehavior: "Sposób otwierania" + } + }, + ImportExport: "Importuj / Eksportuj ustawienia" + } + } +}); \ No newline at end of file diff --git a/search-parts/src/webparts/searchVerticals/loc/sv-SE.js b/search-parts/src/webparts/searchVerticals/loc/sv-SE.js index a97ff287b..551bd1bc6 100644 --- a/search-parts/src/webparts/searchVerticals/loc/sv-SE.js +++ b/search-parts/src/webparts/searchVerticals/loc/sv-SE.js @@ -6,7 +6,7 @@ define([], function() { PropertyPane: { SearchVerticalsGroupName: "Konfigurera sökvertikaler", Verticals: { - PropertyLabel: "Data vertikaler", + PropertyLabel: "Datavertikaler", PanelHeader: "Konfigurera vertikala data", PanelDescription: "Lägg till en ny vertikal så att användare kan söka i en fördefinierad datakälla eller omfattning.", ButtonLabel: "Konfigurera",