From 99b8e7071099b060ec84b65b5a796c6c72b1dd2e Mon Sep 17 00:00:00 2001 From: fdafadf Date: Tue, 12 Oct 2021 11:14:20 +0200 Subject: [PATCH 01/16] Create pl-pl.js --- search-parts/src/loc/pl-pl.js | 325 ++++++++++++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 search-parts/src/loc/pl-pl.js diff --git a/search-parts/src/loc/pl-pl.js b/search-parts/src/loc/pl-pl.js new file mode 100644 index 000000000..c2bc0f794 --- /dev/null +++ b/search-parts/src/loc/pl-pl.js @@ -0,0 +1,325 @@ +define([], function() { + return { + Tokens: { + SelectTokenLabel: "Select a token...", + Context: { + ContextTokensGroupName: "Context tokens", + SiteAbsoluteUrl: "Site absolute URL", + SiteRelativeUrl: "Site server relative URL", + WebAbsoluteUrl: "Web absolute URL", + WebRelativeUrl: "Web server relative URL", + WebTitle: "Web title", + InputQueryText: "Input query text" + }, + Custom: { + CustomTokensGroupName: "Custom value", + CustomValuePlaceholder: "Enter a value...", + InvalidtokenFormatErrorMessage: "Please enter a supported token format using '{' and '}'. (ex: {Today})" + }, + Date: { + DateTokensGroupName: "Date tokens", + Today: "Today", + Yesterday: "Yesterday", + Tomorrow: "Tomorrow", + OneWeekAgo: "One week ago", + OneMonthAgo: "One month ago", + OneYearAgo: "One year ago" + }, + Page: { + PageTokensGroupName: "Page tokens", + PageId: "Page ID", + PageTitle: "Page Title", + PageCustom: "Other page column", + }, + User: { + UserTokensGroupName: "User tokens", + UserName: "User Name", + Me: "Me", + UserDepartment: "User Department", + UserCustom: "User custom property" + } + }, + General: { + OnTextLabel: "On", + OffTextLabel: "Off", + StaticArrayFieldName: "Array like field", + About: "About", + Authors: "Author(s)", + Version: "Version", + InstanceId: "Web Part instance ID", + Resources: { + GroupName: "Resources", + Documentation: "Documentation", + PleaseReferToDocumentationMessage: "Please refer to the official documentation." + }, + Extensibility: { + InvalidDataSourceInstance: "The selected data source '{0}' does not implement the 'BaseDataSource' abstract class correctly. Some methods are missing.", + DataSourceDefinitionNotFound: "The custom data source with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", + LayoutDefinitionNotFound: "The custom layout with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", + InvalidLayoutInstance: "The selected layout '{0}' does not implement the 'BaseLayout' abstract class correctly. Some methods are missing.", + DefaultExtensibilityLibraryName: "Default extensibility library", + InvalidProviderInstance: "The selected suggestions provider '{0}' does not implement the 'BaseSuggestionProvider' abstract class correctly. Some methods are missing.", + ProviderDefinitionNotFound: "The custom suggestions provider with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", + }, + DateFromLabel: "From", + DateTolabel: "To", + DatePickerStrings: { + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + goToToday: 'Go to today', + prevMonthAriaLabel: 'Go to previous month', + nextMonthAriaLabel: 'Go to next month', + prevYearAriaLabel: 'Go to previous year', + nextYearAriaLabel: 'Go to next year', + closeButtonAriaLabel: 'Close date picker', + isRequiredErrorMessage: 'Start date is required.', + invalidInputErrorMessage: 'Invalid date format.' + }, + DateIntervalStrings: { + AnyTime: "Any time", + PastDay: "Past 24 hours", + PastWeek: "Past week", + PastMonth: "Past month", + Past3Months: "Past 3 months", + PastYear: "Past year", + Older: "Older than a year" + }, + SameTabOpenBehavior: "Use the current tab", + NewTabOpenBehavior: "Open in a new tab", + PageOpenBehaviorLabel: "Opening behavior", + EmptyFieldErrorMessage: "This field cannot be empty" + }, + DataSources: { + SharePointSearch: { + SourceName: "SharePoint Search", + SourceConfigurationGroupName: "Source configuration", + QueryTextFieldLabel: "Query text", + QueryTextFieldInfoMessage: "Use the Available connections Web Part configuration tab to specifiy either a static value or a value from a dynamic component on the page like a searchbox", + QueryTemplateFieldLabel: "Query template", + QueryTemplatePlaceHolderText: "ex: Path:{Site}", + QueryTemplateFieldDescription: "The search query template. You can also use {} to build a dynamic query.", + ResultSourceIdLabel: "Result source ID", + ResultSourceIdDescription: "Use a default SharePoint result source ID or type your own GUID value and press 'Enter' to save.", + InvalidResultSourceIdMessage: "The provided value is not a valid GUID", + EnableQueryRulesLabel: "Enable query rules", + IncludeOneDriveResultsLabel: "Include OneDrive for Business results", + RefinementFilters: "Refinement filters", + RefinementFiltersDescription: "Initial refinement filters to apply to the query. These won't appear in the selected filters. For string expressions, use double quotes (\") instead of single quote (').", + EnableLocalizationLabel: "Enable localization", + EnableLocalizationOnLabel: "On", + EnableLocalizationOffLabel: "Off", + QueryCultureLabel: "Language of search request", + QueryCultureUseUiLanguageLabel: "Use interface language", + SelectedPropertiesFieldLabel: "Selected properties", + SelectedPropertiesFieldDescription: "Specifies the properties to retrieve from the search results.", + SelectedPropertiesPlaceholderLabel: "Select properties", + TermNotFound: "(Term with ID '{0}' not found)", + ApplyQueryTemplateBtnText: "Apply", + EnableAudienceTargetingTglLabel: "Enable audience targeting" + }, + MicrosoftSearch: { + QueryTextFieldLabel: "Query text", + QueryTextFieldInfoMessage: "Use the Available connections Web Part configuration tab to specifiy either a static value or a value from a dynamic component on the page like a searchbox", + SourceName: "Microsoft Search", + SourceConfigurationGroupName: "Microsoft Search", + EntityTypesField: "Entity types to search", + SelectedFieldsPropertiesFieldLabel: "Selected fields", + SelectedFieldsPropertiesFieldDescription: "Specifies the fields to retrieve from the search results.", + SelectedFieldsPlaceholderLabel: "Select fields", + EnableTopResultsLabel: "Enable top results", + ContentSourcesFieldLabel: "Content sources", + ContentSourcesFieldDescriptionLabel: "IDs of connections defined in the Microsoft Search connectors administration portal.", + ContentSourcesFieldPlaceholderLabel: "ex: 'MyCustomConnectorId'" + }, + SearchCommon: { + Sort: { + SortPropertyPaneFieldLabel: "Sort order", + SortListDescription: "Specify the initial sort order for the search results. You can either select a field from the dropdown list (only if the data source data have already be fetched) or type your own custom value (press 'Enter' to save your entry)", + SortDirectionAscendingLabel: "Ascending", + SortDirectionDescendingLabel: "Descending", + SortErrorMessage: "Invalid search property (Check if the managed property is sortable).", + SortPanelSortFieldLabel: "Sort on field", + SortPanelSortFieldAria: "Sort by", + SortPanelSortFieldPlaceHolder: "Sort by", + SortPanelSortDirectionLabel: "Sort Direction", + SortDirectionColumnLabel: "Direction", + SortFieldColumnLabel: "Field name", + EditSortLabel: "Edit sort order", + SortInvalidSortableFieldMessage: "This property is not sortable", + SortFieldColumnPlaceholder: "Select field..." + } + } + }, + Controls: { + TextDialogButtonText: "Add Handlebars expression", + TextDialogTitle: "Edit Handlebars expression", + TextDialogCancelButtonText: "Cancel", + TextDialogSaveButtonText: "Save", + SelectItemComboPlaceHolder: "Select property", + AddStaticDataLabel: "Add static data", + TextFieldApplyButtonText: "Apply" + }, + Layouts: { + Debug: { + Name: "Debug" + }, + Custom: { + Name: "Custom" + }, + SimpleList: { + Name: "List", + ShowFileIconLabel: "Show file icon", + ShowItemThumbnailLabel: "Show thumbnail" + }, + DetailsList: { + Name: "Details List", + UseHandlebarsExpressionLabel: "Use Handlebars expression", + MinimumWidthColumnLabel: "Minimum width (px)", + MaximumWidthColumnLabel: "Maximum width (px)", + SortableColumnLabel: "Sortable", + ResizableColumnLabel: "Resizable", + MultilineColumnLabel: "Multiline", + LinkToItemColumnLabel: "Link to item", + CompactModeLabel: "Compact mode", + ShowFileIcon: "Show file icon", + ManageDetailsListColumnDescription: "Add, update or remove columns for the details list layout. You can use either property values in the list directly without any transformation or use an Handlebars expression in the value field. HTML is supported for all fields as well.", + ManageDetailsListColumnLabel: "Manage columns", + ValueColumnLabel: "Column value", + DisplayNameColumnLabel: "Column display name", + FileExtensionFieldLabel: "Field to use for file extension", + GroupByFieldLabel: "Group by field", + EnableGrouping: "Enable grouping", + CollapsedGroupsByDefault: "Show collapsed", + ResetFieldsBtnLabel: "Reset fields to default values" + }, + Cards: { + Name: "Cards", + ManageTilesFieldsLabel: "Managed card fields", + ManageTilesFieldsPanelDescriptionLabel: "Here you can map each field values with the corresponding card placeholders. You can use either a result property directly without any transformation or use an Handlebars expression as field value. Also, when specified, you can also inject your own HTML code in annotated fields.", + PlaceholderNameFieldLabel: "Name", + SupportHTMLColumnLabel: "Allow HTML", + PlaceholderValueFieldLabel: "Value", + UseHandlebarsExpressionLabel: "Use Handlebars expression", + EnableItemPreview: "Enable result preview", + EnableItemPreviewHoverMessage: "Turning on this option may have an impact on performances if too many items are displayed at once and you use the 'AutoPreviewUrl' slot field. We recommend you to use this option with a small amount of items or use predefined preview URLs from your data source fields in slots.", + ShowFileIcon: "Show file icon", + CompactModeLabel: "Compact mode", + PreferedCardNumberPerRow: "Preferred number of cards per row", + Fields: { + Title: "Title", + Location: "Location", + Tags: "Tags", + PreviewImage: "Preview Image", + PreviewUrl: "Preview Url", + Url: "Url", + Date: "Date", + Author: "Author", + ProfileImage: "Profile Image Url", + FileExtension: "File Extension", + IsContainer: "Is Folder" + }, + ResetFieldsBtnLabel: "Reset fields to default values" + }, + Slider: { + Name: "Slider", + SliderAutoPlay: "Auto play", + SliderAutoPlayDuration: "Auto play duration (in seconds)", + SliderPauseAutoPlayOnHover: "Pause on hover", + SliderGroupCells: "Number of elements to group together in slides", + SliderShowPageDots: "Show page dots", + SliderWrapAround: "Infinite scrolling", + SlideHeight: "Slide height (in px)", + SlideWidth: "Slide width (in px)" + }, + People: { + Name: "People", + ManagePeopleFieldsLabel: "Manage people fields", + ManagePeopleFieldsPanelDescriptionLabel: "Here you can map each field values with the corresponding persona placeholders. You can use either data source field value directly without any transformation or use an Handlebars expression in the value field.", + PlaceholderNameFieldLabel: "Name", + PlaceholderValueFieldLabel: "Value", + UseHandlebarsExpressionLabel: "Use Handlebars expression", + PersonaSizeOptionsLabel: "Component size", + PersonaSizeExtraSmall: "Extra small", + PersonaSizeSmall: "Small", + PersonaSizeRegular: "Regular", + PersonaSizeLarge: "Large", + PersonaSizeExtraLarge: "Extra large", + ShowInitialsToggleLabel: "Show initials if no picture available", + SupportHTMLColumnLabel: "Allow HTML", + ResetFieldsBtnLabel: "Reset fields to default values", + ShowPersonaCardOnHover: "Show persona card on hover", + ShowPersonaCardOnHoverCalloutMsg: "This feature uses Microsoft Graph to display information about the user and needs the following API permissions in your tenant to work: ['User.Read','People.Read','Contacts.Read','User.ReadBasic.All'].", + Fields: { + ImageUrl: "Image URL", + PrimaryText: "Primary text", + SecondaryText: "Secondary text", + TertiaryText: "Tertiary text", + OptionalText: "Optional text" + } + }, + Vertical: { + Name: "Vertical" + }, + Horizontal: { + Name: "Horizontal", + PreferedFilterNumberPerRow: "Preferred number of filters per row", + }, + Panel: { + Name: "Panel", + IsModal: "Modal", + IsLightDismiss: "Light dismiss", + Size: "Panel size", + ButtonLabel: "Show filters", + ButtonLabelFieldName: "Button label to display", + HeaderText: "Filters", + HeaderTextFieldName: "Panel header text", + SizeOptions: { + SmallFixedFar: 'Small (default)', + SmallFixedNear: 'Small, near side', + Medium: 'Medium', + Large: 'Large', + LargeFixed: 'Large fixed-width', + ExtraLarge: 'Extra large', + SmallFluid: 'Full-width (fluid)' + } + } + }, + HandlebarsHelpers: { + CountMessageLong: "{0} results for '{1}'", + CountMessageShort: "{0} results", + }, + PropertyPane: { + ConnectionsPage: { + DataConnectionsGroupName: "Available connections" + }, + InformationPage: { + Extensibility: { + GroupName: "Extensibility configuration", + FieldLabel: "Extensibility libraries to load", + ManageBtnLabel: "Configure", + Columns: { + Name: "Name/Purpose", + Id: "Manifest GUID", + Enabled: "Enabled/Disabled" + } + } + } + }, + Filters: { + ApplyAllFiltersButtonLabel: "Apply", + ClearAllFiltersButtonLabel: "Clear", + FilterNoValuesMessage: "No values for this filter", + OrOperator: "OR", + AndOperator: "AND", + ComboBoxPlaceHolder: "Select value" + }, + SuggestionProviders: { + SharePointStatic: { + ProviderName: "SharePoint Static search suggestions", + ProviderDescription: "Retrieve SharePoint static user defined search suggestions" + } + } + } +}) From 01142a2dfe4926ed94304493e12a1f5163d20d13 Mon Sep 17 00:00:00 2001 From: fdafadf Date: Tue, 12 Oct 2021 11:17:20 +0200 Subject: [PATCH 02/16] Partial translation to polish. --- search-parts/src/loc/pl-pl.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/search-parts/src/loc/pl-pl.js b/search-parts/src/loc/pl-pl.js index c2bc0f794..a4add1115 100644 --- a/search-parts/src/loc/pl-pl.js +++ b/search-parts/src/loc/pl-pl.js @@ -18,12 +18,12 @@ define([], function() { }, Date: { DateTokensGroupName: "Date tokens", - Today: "Today", - Yesterday: "Yesterday", - Tomorrow: "Tomorrow", - OneWeekAgo: "One week ago", - OneMonthAgo: "One month ago", - OneYearAgo: "One year ago" + Today: "Dziś", + Yesterday: "Wczoraj", + Tomorrow: "Jutro", + OneWeekAgo: "Tydzień temu", + OneMonthAgo: "Mieiąc temu", + OneYearAgo: "Rok temu" }, Page: { PageTokensGroupName: "Page tokens", @@ -33,8 +33,8 @@ define([], function() { }, User: { UserTokensGroupName: "User tokens", - UserName: "User Name", - Me: "Me", + UserName: "Nazwa użytkownika", + Me: "Ja", UserDepartment: "User Department", UserCustom: "User custom property" } @@ -137,14 +137,14 @@ define([], function() { Sort: { SortPropertyPaneFieldLabel: "Sort order", SortListDescription: "Specify the initial sort order for the search results. You can either select a field from the dropdown list (only if the data source data have already be fetched) or type your own custom value (press 'Enter' to save your entry)", - SortDirectionAscendingLabel: "Ascending", - SortDirectionDescendingLabel: "Descending", + SortDirectionAscendingLabel: "Rosnąco", + SortDirectionDescendingLabel: "Malejąco", SortErrorMessage: "Invalid search property (Check if the managed property is sortable).", SortPanelSortFieldLabel: "Sort on field", SortPanelSortFieldAria: "Sort by", SortPanelSortFieldPlaceHolder: "Sort by", - SortPanelSortDirectionLabel: "Sort Direction", - SortDirectionColumnLabel: "Direction", + SortPanelSortDirectionLabel: "Kierunek sortowania", + SortDirectionColumnLabel: "Kierunek", SortFieldColumnLabel: "Field name", EditSortLabel: "Edit sort order", SortInvalidSortableFieldMessage: "This property is not sortable", From f72f1780329c343473c290506089f3e4a03c35b2 Mon Sep 17 00:00:00 2001 From: fdafadf Date: Thu, 21 Oct 2021 08:51:38 +0200 Subject: [PATCH 03/16] Translation to polish. --- search-parts/src/loc/pl-pl.js | 646 +++++++++++++++++----------------- 1 file changed, 323 insertions(+), 323 deletions(-) diff --git a/search-parts/src/loc/pl-pl.js b/search-parts/src/loc/pl-pl.js index a4add1115..8eb1e8583 100644 --- a/search-parts/src/loc/pl-pl.js +++ b/search-parts/src/loc/pl-pl.js @@ -1,325 +1,325 @@ define([], function() { - return { - Tokens: { - SelectTokenLabel: "Select a token...", - Context: { - ContextTokensGroupName: "Context tokens", - SiteAbsoluteUrl: "Site absolute URL", - SiteRelativeUrl: "Site server relative URL", - WebAbsoluteUrl: "Web absolute URL", - WebRelativeUrl: "Web server relative URL", - WebTitle: "Web title", - InputQueryText: "Input query text" - }, - Custom: { - CustomTokensGroupName: "Custom value", - CustomValuePlaceholder: "Enter a value...", - InvalidtokenFormatErrorMessage: "Please enter a supported token format using '{' and '}'. (ex: {Today})" - }, - Date: { - DateTokensGroupName: "Date tokens", - Today: "Dziś", - Yesterday: "Wczoraj", - Tomorrow: "Jutro", - OneWeekAgo: "Tydzień temu", - OneMonthAgo: "Mieiąc temu", - OneYearAgo: "Rok temu" - }, - Page: { - PageTokensGroupName: "Page tokens", - PageId: "Page ID", - PageTitle: "Page Title", - PageCustom: "Other page column", - }, - User: { - UserTokensGroupName: "User tokens", - UserName: "Nazwa użytkownika", - Me: "Ja", - UserDepartment: "User Department", - UserCustom: "User custom property" - } - }, - General: { - OnTextLabel: "On", - OffTextLabel: "Off", - StaticArrayFieldName: "Array like field", - About: "About", - Authors: "Author(s)", - Version: "Version", - InstanceId: "Web Part instance ID", - Resources: { - GroupName: "Resources", - Documentation: "Documentation", - PleaseReferToDocumentationMessage: "Please refer to the official documentation." - }, - Extensibility: { - InvalidDataSourceInstance: "The selected data source '{0}' does not implement the 'BaseDataSource' abstract class correctly. Some methods are missing.", - DataSourceDefinitionNotFound: "The custom data source with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", - LayoutDefinitionNotFound: "The custom layout with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", - InvalidLayoutInstance: "The selected layout '{0}' does not implement the 'BaseLayout' abstract class correctly. Some methods are missing.", - DefaultExtensibilityLibraryName: "Default extensibility library", - InvalidProviderInstance: "The selected suggestions provider '{0}' does not implement the 'BaseSuggestionProvider' abstract class correctly. Some methods are missing.", - ProviderDefinitionNotFound: "The custom suggestions provider with key '{0}' was not found. Make sure the solution is correctly deployed to the app caltog and the manifest ID registered for this Web Part.", - }, - DateFromLabel: "From", - DateTolabel: "To", - DatePickerStrings: { - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], - goToToday: 'Go to today', - prevMonthAriaLabel: 'Go to previous month', - nextMonthAriaLabel: 'Go to next month', - prevYearAriaLabel: 'Go to previous year', - nextYearAriaLabel: 'Go to next year', - closeButtonAriaLabel: 'Close date picker', - isRequiredErrorMessage: 'Start date is required.', - invalidInputErrorMessage: 'Invalid date format.' - }, - DateIntervalStrings: { - AnyTime: "Any time", - PastDay: "Past 24 hours", - PastWeek: "Past week", - PastMonth: "Past month", - Past3Months: "Past 3 months", - PastYear: "Past year", - Older: "Older than a year" - }, - SameTabOpenBehavior: "Use the current tab", - NewTabOpenBehavior: "Open in a new tab", - PageOpenBehaviorLabel: "Opening behavior", - EmptyFieldErrorMessage: "This field cannot be empty" - }, - DataSources: { - SharePointSearch: { - SourceName: "SharePoint Search", - SourceConfigurationGroupName: "Source configuration", - QueryTextFieldLabel: "Query text", - QueryTextFieldInfoMessage: "Use the Available connections Web Part configuration tab to specifiy either a static value or a value from a dynamic component on the page like a searchbox", - QueryTemplateFieldLabel: "Query template", - QueryTemplatePlaceHolderText: "ex: Path:{Site}", - QueryTemplateFieldDescription: "The search query template. You can also use {} to build a dynamic query.", - ResultSourceIdLabel: "Result source ID", - ResultSourceIdDescription: "Use a default SharePoint result source ID or type your own GUID value and press 'Enter' to save.", - InvalidResultSourceIdMessage: "The provided value is not a valid GUID", - EnableQueryRulesLabel: "Enable query rules", - IncludeOneDriveResultsLabel: "Include OneDrive for Business results", - RefinementFilters: "Refinement filters", - RefinementFiltersDescription: "Initial refinement filters to apply to the query. These won't appear in the selected filters. For string expressions, use double quotes (\") instead of single quote (').", - EnableLocalizationLabel: "Enable localization", - EnableLocalizationOnLabel: "On", - EnableLocalizationOffLabel: "Off", - QueryCultureLabel: "Language of search request", - QueryCultureUseUiLanguageLabel: "Use interface language", - SelectedPropertiesFieldLabel: "Selected properties", - SelectedPropertiesFieldDescription: "Specifies the properties to retrieve from the search results.", - SelectedPropertiesPlaceholderLabel: "Select properties", - TermNotFound: "(Term with ID '{0}' not found)", - ApplyQueryTemplateBtnText: "Apply", - EnableAudienceTargetingTglLabel: "Enable audience targeting" - }, - MicrosoftSearch: { - QueryTextFieldLabel: "Query text", - QueryTextFieldInfoMessage: "Use the Available connections Web Part configuration tab to specifiy either a static value or a value from a dynamic component on the page like a searchbox", - SourceName: "Microsoft Search", - SourceConfigurationGroupName: "Microsoft Search", - EntityTypesField: "Entity types to search", - SelectedFieldsPropertiesFieldLabel: "Selected fields", - SelectedFieldsPropertiesFieldDescription: "Specifies the fields to retrieve from the search results.", - SelectedFieldsPlaceholderLabel: "Select fields", - EnableTopResultsLabel: "Enable top results", - ContentSourcesFieldLabel: "Content sources", - ContentSourcesFieldDescriptionLabel: "IDs of connections defined in the Microsoft Search connectors administration portal.", - ContentSourcesFieldPlaceholderLabel: "ex: 'MyCustomConnectorId'" - }, - SearchCommon: { - Sort: { - SortPropertyPaneFieldLabel: "Sort order", - SortListDescription: "Specify the initial sort order for the search results. You can either select a field from the dropdown list (only if the data source data have already be fetched) or type your own custom value (press 'Enter' to save your entry)", - SortDirectionAscendingLabel: "Rosnąco", - SortDirectionDescendingLabel: "Malejąco", - SortErrorMessage: "Invalid search property (Check if the managed property is sortable).", - SortPanelSortFieldLabel: "Sort on field", - SortPanelSortFieldAria: "Sort by", - SortPanelSortFieldPlaceHolder: "Sort by", - SortPanelSortDirectionLabel: "Kierunek sortowania", - SortDirectionColumnLabel: "Kierunek", - SortFieldColumnLabel: "Field name", - EditSortLabel: "Edit sort order", - SortInvalidSortableFieldMessage: "This property is not sortable", - SortFieldColumnPlaceholder: "Select field..." - } - } - }, - Controls: { - TextDialogButtonText: "Add Handlebars expression", - TextDialogTitle: "Edit Handlebars expression", - TextDialogCancelButtonText: "Cancel", - TextDialogSaveButtonText: "Save", - SelectItemComboPlaceHolder: "Select property", - AddStaticDataLabel: "Add static data", - TextFieldApplyButtonText: "Apply" - }, - Layouts: { - Debug: { - Name: "Debug" - }, - Custom: { - Name: "Custom" - }, - SimpleList: { - Name: "List", - ShowFileIconLabel: "Show file icon", - ShowItemThumbnailLabel: "Show thumbnail" - }, - DetailsList: { - Name: "Details List", - UseHandlebarsExpressionLabel: "Use Handlebars expression", - MinimumWidthColumnLabel: "Minimum width (px)", - MaximumWidthColumnLabel: "Maximum width (px)", - SortableColumnLabel: "Sortable", - ResizableColumnLabel: "Resizable", - MultilineColumnLabel: "Multiline", - LinkToItemColumnLabel: "Link to item", - CompactModeLabel: "Compact mode", - ShowFileIcon: "Show file icon", - ManageDetailsListColumnDescription: "Add, update or remove columns for the details list layout. You can use either property values in the list directly without any transformation or use an Handlebars expression in the value field. HTML is supported for all fields as well.", - ManageDetailsListColumnLabel: "Manage columns", - ValueColumnLabel: "Column value", - DisplayNameColumnLabel: "Column display name", - FileExtensionFieldLabel: "Field to use for file extension", - GroupByFieldLabel: "Group by field", - EnableGrouping: "Enable grouping", - CollapsedGroupsByDefault: "Show collapsed", - ResetFieldsBtnLabel: "Reset fields to default values" - }, - Cards: { - Name: "Cards", - ManageTilesFieldsLabel: "Managed card fields", - ManageTilesFieldsPanelDescriptionLabel: "Here you can map each field values with the corresponding card placeholders. You can use either a result property directly without any transformation or use an Handlebars expression as field value. Also, when specified, you can also inject your own HTML code in annotated fields.", - PlaceholderNameFieldLabel: "Name", - SupportHTMLColumnLabel: "Allow HTML", - PlaceholderValueFieldLabel: "Value", - UseHandlebarsExpressionLabel: "Use Handlebars expression", - EnableItemPreview: "Enable result preview", - EnableItemPreviewHoverMessage: "Turning on this option may have an impact on performances if too many items are displayed at once and you use the 'AutoPreviewUrl' slot field. We recommend you to use this option with a small amount of items or use predefined preview URLs from your data source fields in slots.", - ShowFileIcon: "Show file icon", - CompactModeLabel: "Compact mode", - PreferedCardNumberPerRow: "Preferred number of cards per row", - Fields: { - Title: "Title", - Location: "Location", - Tags: "Tags", - PreviewImage: "Preview Image", - PreviewUrl: "Preview Url", - Url: "Url", - Date: "Date", - Author: "Author", - ProfileImage: "Profile Image Url", - FileExtension: "File Extension", - IsContainer: "Is Folder" - }, - ResetFieldsBtnLabel: "Reset fields to default values" - }, - Slider: { - Name: "Slider", - SliderAutoPlay: "Auto play", - SliderAutoPlayDuration: "Auto play duration (in seconds)", - SliderPauseAutoPlayOnHover: "Pause on hover", - SliderGroupCells: "Number of elements to group together in slides", - SliderShowPageDots: "Show page dots", - SliderWrapAround: "Infinite scrolling", - SlideHeight: "Slide height (in px)", - SlideWidth: "Slide width (in px)" - }, - People: { - Name: "People", - ManagePeopleFieldsLabel: "Manage people fields", - ManagePeopleFieldsPanelDescriptionLabel: "Here you can map each field values with the corresponding persona placeholders. You can use either data source field value directly without any transformation or use an Handlebars expression in the value field.", - PlaceholderNameFieldLabel: "Name", - PlaceholderValueFieldLabel: "Value", - UseHandlebarsExpressionLabel: "Use Handlebars expression", - PersonaSizeOptionsLabel: "Component size", - PersonaSizeExtraSmall: "Extra small", - PersonaSizeSmall: "Small", - PersonaSizeRegular: "Regular", - PersonaSizeLarge: "Large", - PersonaSizeExtraLarge: "Extra large", - ShowInitialsToggleLabel: "Show initials if no picture available", - SupportHTMLColumnLabel: "Allow HTML", - ResetFieldsBtnLabel: "Reset fields to default values", - ShowPersonaCardOnHover: "Show persona card on hover", - ShowPersonaCardOnHoverCalloutMsg: "This feature uses Microsoft Graph to display information about the user and needs the following API permissions in your tenant to work: ['User.Read','People.Read','Contacts.Read','User.ReadBasic.All'].", - Fields: { - ImageUrl: "Image URL", - PrimaryText: "Primary text", - SecondaryText: "Secondary text", - TertiaryText: "Tertiary text", - OptionalText: "Optional text" - } - }, - Vertical: { - Name: "Vertical" - }, - Horizontal: { - Name: "Horizontal", - PreferedFilterNumberPerRow: "Preferred number of filters per row", - }, - Panel: { - Name: "Panel", - IsModal: "Modal", - IsLightDismiss: "Light dismiss", - Size: "Panel size", - ButtonLabel: "Show filters", - ButtonLabelFieldName: "Button label to display", - HeaderText: "Filters", - HeaderTextFieldName: "Panel header text", - SizeOptions: { - SmallFixedFar: 'Small (default)', - SmallFixedNear: 'Small, near side', - Medium: 'Medium', - Large: 'Large', - LargeFixed: 'Large fixed-width', - ExtraLarge: 'Extra large', - SmallFluid: 'Full-width (fluid)' - } - } - }, - HandlebarsHelpers: { - CountMessageLong: "{0} results for '{1}'", - CountMessageShort: "{0} results", - }, - PropertyPane: { - ConnectionsPage: { - DataConnectionsGroupName: "Available connections" - }, - InformationPage: { - Extensibility: { - GroupName: "Extensibility configuration", - FieldLabel: "Extensibility libraries to load", - ManageBtnLabel: "Configure", - Columns: { - Name: "Name/Purpose", - Id: "Manifest GUID", - Enabled: "Enabled/Disabled" - } - } - } - }, - Filters: { - ApplyAllFiltersButtonLabel: "Apply", - ClearAllFiltersButtonLabel: "Clear", - FilterNoValuesMessage: "No values for this filter", - OrOperator: "OR", - AndOperator: "AND", - ComboBoxPlaceHolder: "Select value" - }, - SuggestionProviders: { - SharePointStatic: { - ProviderName: "SharePoint Static search suggestions", - ProviderDescription: "Retrieve SharePoint static user defined search suggestions" - } - } - } + 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: "Modal", + IsLightDismiss: "Light dismiss", + 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" + } + } + } }) From 0a0b56e8e00405f5c4984aca730cd3f2c446e4b1 Mon Sep 17 00:00:00 2001 From: Franck Cornu Date: Fri, 22 Oct 2021 16:03:13 -0400 Subject: [PATCH 04/16] #1367 - Added filter deep links feature --- .../components/SearchFiltersContainer.tsx | 149 ++++++++++++++++-- 1 file changed, 138 insertions(+), 11 deletions(-) diff --git a/search-parts/src/webparts/searchFilters/components/SearchFiltersContainer.tsx b/search-parts/src/webparts/searchFilters/components/SearchFiltersContainer.tsx index e4bf87ff0..a95359166 100644 --- a/search-parts/src/webparts/searchFilters/components/SearchFiltersContainer.tsx +++ b/search-parts/src/webparts/searchFilters/components/SearchFiltersContainer.tsx @@ -21,8 +21,11 @@ import { } from '@pnp/modern-search-extensibility'; import { ISearchFiltersTemplateContext } from '../../../models/common/ITemplateContext'; import { flatten } from '@microsoft/sp-lodash-subset'; -import { DisplayMode } from '@microsoft/sp-core-library'; +import { DisplayMode, Log } from '@microsoft/sp-core-library'; import { DataFilterHelper } from '../../../helpers/DataFilterHelper'; +import { UrlHelper } from '../../../helpers/UrlHelper'; + +const DEEPLINK_QUERYSTRING_PARAM = 'f'; export default class SearchFiltersContainer 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; + } } From 806ab52ab1473c28af9bcde6023c4c7b11f3679d Mon Sep 17 00:00:00 2001 From: fdafadf Date: Tue, 26 Oct 2021 14:06:51 +0000 Subject: [PATCH 05/16] Translation to polish. --- .../src/webparts/searchBox/loc/pl-pl.js | 49 +++++++++ .../src/webparts/searchFilters/loc/pl-pl.js | 69 ++++++++++++ .../src/webparts/searchResults/loc/pl-pl.js | 101 ++++++++++++++++++ .../src/webparts/searchVerticals/loc/pl-pl.js | 24 +++++ 4 files changed, 243 insertions(+) create mode 100644 search-parts/src/webparts/searchBox/loc/pl-pl.js create mode 100644 search-parts/src/webparts/searchFilters/loc/pl-pl.js create mode 100644 search-parts/src/webparts/searchResults/loc/pl-pl.js create mode 100644 search-parts/src/webparts/searchVerticals/loc/pl-pl.js diff --git a/search-parts/src/webparts/searchBox/loc/pl-pl.js b/search-parts/src/webparts/searchBox/loc/pl-pl.js new file mode 100644 index 000000000..1477f0844 --- /dev/null +++ b/search-parts/src/webparts/searchBox/loc/pl-pl.js @@ -0,0 +1,49 @@ +define([], function() { + return { + General: { + DynamicPropertyDefinition: "Zapytanie wyszukiwania" + }, + PropertyPane: { + SearchBoxSettingsGroup: { + GroupName: "Ustawienia pola wyszukiwania", + PlaceholderTextLabel: "Tekst zastępny wyświetlany w polu wyszukiwania", + SearchInNewPageLabel: "Wyślij zapytanie do nowego okna", + PageUrlLabel: "Adres URL strony", + UrlErrorMessage: "Proszę podać poprawny URL.", + QueryPathBehaviorLabel: "Metoda", + QueryInputTransformationLabel: "Szablon przekształcenia zapytania", + UrlFragmentQueryPathBehavior: "Fragment URL", + QueryStringQueryPathBehavior: "Parametr Query-String", + QueryStringParameterName: "Nazwa parametru", + QueryParameterNotEmpty: "Proszę podać wartość parametru." + }, + AvailableConnectionsGroup: { + GroupName: "Dostępne połączenia", + UseDynamicDataSourceLabel: "Użyj dynamicznego źródła jako domyślnej wartości", + QueryKeywordsPropertyLabel: "" + }, + QuerySuggestionsGroup: { + GroupName: "Sugestie zapytań", + EnableQuerySuggestions: "Włącz sugestie zapytań", + EditSuggestionProvidersLabel: "Konfiguruj dostępnych dostawców", + SuggestionProvidersLabel: "Dostawcy sugestii", + SuggestionProvidersDescription: "Włącz lub wyłącz indywidualnych dostawców.", + EnabledPropertyLabel: "Włączone", + ProviderNamePropertyLabel: "Nazwa", + ProviderDescriptionPropertyLabel: "Opis", + DefaultSuggestionGroupName: "Zalecane", + NumberOfSuggestionsToShow: "Liczba prezentowanych sugestii w grupie" + }, + InformationPage: { + Extensibility: { + PanelHeader: "Konfiguruj biblioteki rozszerzalności do załadowania podczas startu niestandardowych dostawców sugestii", + PanelDescription: "Dodaj/Usuń identyfikatory niestandardowych bibliotek rozszerzalności. Wybierz nazwę i zdecyduj czy mają być ładowane przy starcie. Tylko niestandardowi dostawcy sugestii będą tutaj ładowani.", + } + }, + ImportExport: "Importuj / Eksportuj ustawienia" + }, + SearchBox: { + DefaultPlaceholder: "Wprowadź zapytanie..." + } + } +}); \ No newline at end of file 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/searchResults/loc/pl-pl.js b/search-parts/src/webparts/searchResults/loc/pl-pl.js new file mode 100644 index 000000000..e05f76dec --- /dev/null +++ b/search-parts/src/webparts/searchResults/loc/pl-pl.js @@ -0,0 +1,101 @@ +define([], function() { + return { + General: { + PlaceHolder: { + EditLabel: "Edytuj", + IconText: "Web Part Wyników Wyszukiwania by @PnP", + Description: "Wyświetla wyniki wyszukiwania z SharePoint lub Microsoft search.", + ConfigureBtnLabel: "Konfiguruj" + }, + WebPartDefaultTitle: "Web Part Wyników Wyszukiwania", + ShowBlankEditInfoMessage: "Brak wyników dla zapytania. Zgodnie z parametrami ten Web Part pozostanie pusty.", + CurrentVerticalNotSelectedMessage: "Obecnie wybrany wertykał nie odpowiada żadnemu powiązanemu składnikowi Web Part i pozostanie pusty w trybie wyświetlania." + }, + PropertyPane: { + DataSourcePage: { + DataSourceConnectionGroupName: "Dostępne źródła danych", + PagingOptionsGroupName: "Opcje stronnicowania", + ItemsCountPerPageFieldName: "Liczba elementów na stronę", + PagingRangeFieldName: "Liczba dostępnych stron", + ShowPagingFieldName: "Pokaż stronnicowanie", + HidePageNumbersFieldName: "Ukryj numery stron", + HideNavigationFieldName: "Ukryj przyciski nawigacyjne (poprzednia strona, następna strona)", + HideFirstLastPagesFieldName: "Ukruj przyciski początek/koniec", + HideDisabledFieldName: "Ukryj przyciski nawigacyjne (poprzednia strona, następna strona, początek, koniec) gdy są nieaktywne.", + TemplateSlots: { + GroupName: "Sloty układu", + ConfigureSlotsLabel: "Edytuje sloty dla tego źródła danych", + ConfigureSlotsBtnLabel: "Modyfikuj", + ConfigureSlotsPanelHeader: "Sloty układu", + ConfigureSlotsPanelDescription: "Dodaj tutaj sloty używane przez różne układy. Slot jest zmienną której możesz używać w szablonach której wartość jest dynamicznie zastępowana przez wartość ze źródła danych. W ten sposób szablony są bardziej reużywalne i mniej powiązane z konkretnym źródłem danych. Używaj wyrażeń Handlebars `{{slot item @root.slots.}}`.", + 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/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 From 569cafab817cac3fb095d0e7c36cf7f82507c787 Mon Sep 17 00:00:00 2001 From: fdafadf Date: Tue, 26 Oct 2021 14:17:47 +0000 Subject: [PATCH 06/16] Translation to polish. --- .../src/webparts/searchBox/SearchBoxWebPart.manifest.json | 6 ++++-- .../searchFilters/SearchFiltersWebPart.manifest.json | 6 ++++-- .../searchResults/SearchResultsWebPart.manifest.json | 6 ++++-- .../searchVerticals/SearchVerticalsWebPart.manifest.json | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) 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/searchFilters/SearchFiltersWebPart.manifest.json b/search-parts/src/webparts/searchFilters/SearchFiltersWebPart.manifest.json index 5e0664f1b..b511f3005 100644 --- a/search-parts/src/webparts/searchFilters/SearchFiltersWebPart.manifest.json +++ b/search-parts/src/webparts/searchFilters/SearchFiltersWebPart.manifest.json @@ -15,11 +15,13 @@ }, "title": { "default": "PnP - Search Filters", - "fr-fr": "PnP - Filtres de recherche" + "fr-fr": "PnP - Filtres de recherche", + "pl-pl": "PnP - Filtry wyszukiwania" }, "description": { "default": "Filters results from the search results Web Part", - "fr-fr": "Filtre les résultats provenant du Web Part de visualistion de données" + "fr-fr": "Filtre les résultats provenant du Web Part de visualistion de données", + "pl-pl": "Filtruje wyniki ze składnika Web Part Wyników wyszukiwania" }, "officeFabricIconFontName": "Filter", "properties": { 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/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": { From 64eedc93ce818d661d8aee74c6cf7c79e467002d Mon Sep 17 00:00:00 2001 From: Franck Cornu Date: Tue, 26 Oct 2021 10:45:50 -0400 Subject: [PATCH 07/16] #1367 - Added documentation for filters deep linking --- .../search-filters/filter_deep_linking.png | Bin 0 -> 76324 bytes docs/usage/search-filters/index.md | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 docs/assets/webparts/search-filters/filter_deep_linking.png 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 0000000000000000000000000000000000000000..3adedb579343fc038b7e2232e801f65076d6663e GIT binary patch literal 76324 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 Date: Tue, 26 Oct 2021 17:09:01 +0200 Subject: [PATCH 08/16] #1429 check for undefined --- search-parts/src/webparts/searchBox/SearchBoxWebPart.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts b/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts index 7a67de5ca..3ad8232dc 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 Date: Tue, 26 Oct 2021 14:26:43 -0400 Subject: [PATCH 09/16] Fixed #1444 - Added a new `queryStringParameters` to the data context interface allowing to reevaluate query string even after a browser window history update (ex: pushState) and re-renders the Web Part. --- .../src/models/dataSources/IDataContext.ts | 7 ++++++- search-parts/src/helpers/UrlHelper.ts | 15 +++++++++++++++ .../searchResults/SearchResultsWebPart.ts | 12 ++++++++++-- 3 files changed, 31 insertions(+), 3 deletions(-) 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-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/webparts/searchResults/SearchResultsWebPart.ts b/search-parts/src/webparts/searchResults/SearchResultsWebPart.ts index f3d0f75dc..46faecb99 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 Date: Wed, 27 Oct 2021 07:17:08 +0000 Subject: [PATCH 10/16] Translation to polish. --- search-parts/src/loc/pl-pl.js | 4 ++-- search-parts/src/webparts/searchBox/SearchBoxWebPart.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/search-parts/src/loc/pl-pl.js b/search-parts/src/loc/pl-pl.js index 8eb1e8583..8c609d888 100644 --- a/search-parts/src/loc/pl-pl.js +++ b/search-parts/src/loc/pl-pl.js @@ -268,8 +268,8 @@ define([], function() { }, Panel: { Name: "Panel", - IsModal: "Modal", - IsLightDismiss: "Light dismiss", + IsModal: "Modalny", + IsLightDismiss: "Lekkie odrzucenie", Size: "Rozmiar panelu", ButtonLabel: "Pokaż filtry", ButtonLabelFieldName: "Etykieta przycisku", diff --git a/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts b/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts index 96a726b09..c89b62406 100644 --- a/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts +++ b/search-parts/src/webparts/searchBox/SearchBoxWebPart.ts @@ -412,7 +412,9 @@ export default class SearchBoxWebPart extends BaseWebPart { onUpdate(field.id, checked); - } + }, + offText: commonStrings.General.OffTextLabel, + onText: commonStrings.General.OnTextLabel }) ) ); From cf27e1e95db0ec3ead965cf58119b4019ddc0b27 Mon Sep 17 00:00:00 2001 From: Mikael Svenson Date: Wed, 27 Oct 2021 09:38:39 +0200 Subject: [PATCH 11/16] #1444 version bump --- search-extensibility/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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": { From 630fd81555324f5061c21d2af43a24f7d2d1efb7 Mon Sep 17 00:00:00 2001 From: Mikael Svenson Date: Wed, 27 Oct 2021 10:46:06 +0200 Subject: [PATCH 12/16] Extensibility version bump --- search-extensibility/tsconfig.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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": [ From e410b4c8539b6e5335c76b6e8f80eb31e32894dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A4r=20Aronsson?= Date: Thu, 28 Oct 2021 10:29:19 +0200 Subject: [PATCH 13/16] Improved Swedish translations --- search-parts/src/loc/sv-SE.js | 58 +++++++++---------- .../src/webparts/searchBox/loc/sv-SE.js | 4 +- .../src/webparts/searchFilters/loc/sv-SE.js | 2 +- .../src/webparts/searchResults/loc/sv-SE.js | 14 ++--- .../src/webparts/searchVerticals/loc/sv-SE.js | 2 +- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/search-parts/src/loc/sv-SE.js b/search-parts/src/loc/sv-SE.js index 1d66e9c41..74b47e715 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/loc/sv-SE.js b/search-parts/src/webparts/searchBox/loc/sv-SE.js index db2229d84..55fdec213 100644 --- a/search-parts/src/webparts/searchBox/loc/sv-SE.js +++ b/search-parts/src/webparts/searchBox/loc/sv-SE.js @@ -11,7 +11,7 @@ define([], function() { PageUrlLabel: "Sidans URL", UrlErrorMessage: "Ange en giltig URL.", QueryPathBehaviorLabel: "Metod", - QueryInputTransformationLabel: "Mallen för transformering av frågeinmatning", + QueryInputTransformationLabel: "Mallen för omvandling av frågeinmatning", UrlFragmentQueryPathBehavior: "URL-fragment", QueryStringQueryPathBehavior: "URL-parameter", QueryStringParameterName: "Parameternamn", @@ -19,7 +19,7 @@ define([], function() { }, AvailableConnectionsGroup: { GroupName: "Tillgängliga anslutningar", - UseDynamicDataSourceLabel: "Använd dynamisk datakälla som standardingång", + UseDynamicDataSourceLabel: "Använd dynamisk datakälla som standardinmatning", QueryKeywordsPropertyLabel: "" }, QuerySuggestionsGroup: { 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/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/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", From 54001e3116ce3efcafd4da9e63054a69853be10f Mon Sep 17 00:00:00 2001 From: Mikael Svenson Date: Thu, 28 Oct 2021 16:30:14 +0200 Subject: [PATCH 14/16] Update index.md Added search box clarifying text. --- docs/usage/search-filters/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usage/search-filters/index.md b/docs/usage/search-filters/index.md index ecc4541da..448966f11 100644 --- a/docs/usage/search-filters/index.md +++ b/docs/usage/search-filters/index.md @@ -69,6 +69,8 @@ These taxonomy values can then be used in the Filters Web Part using a `Refinabl 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 From 5208fc23dccdbc8c09ee971349752ff159442637 Mon Sep 17 00:00:00 2001 From: Franck Cornu Date: Thu, 28 Oct 2021 15:11:15 -0400 Subject: [PATCH 15/16] Updated extensibility version --- search-parts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/search-parts/package.json b/search-parts/package.json index cdc2d1e58..bc16dd15d 100644 --- a/search-parts/package.json +++ b/search-parts/package.json @@ -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", From 4f7abc692cf410ca07b93472c7131a1023699a50 Mon Sep 17 00:00:00 2001 From: Franck Cornu Date: Thu, 28 Oct 2021 15:25:45 -0400 Subject: [PATCH 16/16] - TSLint + version update --- search-parts/config/package-solution.json | 2 +- search-parts/package.json | 2 +- search-parts/src/components/CollapsibleContentComponent.tsx | 2 +- .../src/layouts/results/detailsList/DetailListLayout.ts | 2 +- .../components/SearchBoxAutoComplete/SearchBoxAutoComplete.tsx | 2 +- .../searchFilters/components/SearchFiltersContainer.tsx | 2 +- search-parts/src/webparts/searchResults/SearchResultsWebPart.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) 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 bc16dd15d..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": { 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/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/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