Either/Or Management

Welcome to Fans United Either/Or Management Widget. The widget allows staff members with sufficient permissions to create, update and delete Either/Or mini-games. You can use this widget as it is and embed it in your platform, or you can use the Management Panel. Either/Or is a mini-game where users receives two options and he needs to answer which is one more or less for a specified time. With successful installation, you can create, edit and delete a Either/Or mini-game.

Installation and usage

The easiest way to use fansunited-widget-either-or-management is to install it from npm as follows:

npm install fansunited-widget-either-or

or:

yarn add fansunited-widget-either-or

Here is an example how you can integrate Fans United Either/Or Management Widget:

import  'fansunited-widget-either-or/style.css';
import { EitherOrManager } from  'fansunited-widget-either-or';

const  App = () => {
return (
<EitherOrManager
	fansUnitedApiKey={'your-api-key'}
	fansUnitedClientId={'your-client-id'} />
);
}

Notes

  • The widget is bundled as a React component and its usage is as simple as the above example

  • Don't worry about your project's CSS. The widget's styling is done with Tailwind CSS and all classes are prefixed to avoid collisions with your existing CSS. This means that the widget's CSS will NOT affect yours. One important thing is that you need to import style.css file from package folder:

import 'fansunited-widget-either-or/style.css';

N.B: If you are using an entry point for importing all your stylings, you need to import fansunited-widget-either-or/style.css there as well

Props

type  EitherOrManagerProps = {
	fansUnitedApiKey: string;
	fansUnitedClientId: string;
	fansUnitedLanguage?: string;
	fansUnitedEnvironment?: string;
	sportal365Project?: string;
	sportal365Infrastructure?: 'shared' | 'betway';
	labels?: LabelsModel;
};

Fans United Either/Or Management Widget depends on Fans United JS SDK and Fans United Client API. Thats why fansUnitedApiKey and fansUnitedClientId are required. They will be provided to you from Fans United team. For other optional props here is some information:

  • fansUnitedLanguage - for our sports APIs FansUnited platform supports different languages. For now they are Bulgarian (bg), English (en), Romanian (ro), Greek (el), Slovak (sk), Serbian (sr) and Hungarian (hu). If no value given it will be set to English (en).

  • fansUnitedEnvironment - You can run the widget in the following environments: staging, production and watg. If no value given it will be set to production (prod).

  • labels - you can easily translate all labels, UI messages, descriptions, placeholders and etc. with this prop. By default, Fans United Match Quiz Management Widget is available in English so if no value is given, the widget will be translated in English.

  • sportal365Project - The Sportal365 project. Used as a request header when communicating with Sportal365 APIs.

  • sportal365Infrastructure - The Sportal365 infrastructure. Used to determine what authorization should be used when communicating with Sportal365 APIs. If no value given (when sportal365Project props is provided) it will be set to shared .

Translation

You can easily translate Fans United Either/Or Management Widget in your language! You just need to pass an object to labels prop with concrete keys and values and that's it! Here's an example how you can do it:

import  'fansunited-widget-either-or/style.css';
import { EitherOrManager } from  'fansunited-widget-either-or';

const labels = {
	userNotFound:  'User not found. Please try again',
	noGamesFound: "No Either/Or games were found. You can create one by clicking the button 'Create'",
	signOut:  'Sign out',
	timeFormat:  'DD.MM.YYYY, HH:mm',
	getEitherOrsErrorMessage: 'There was a problem with fetching list of Either/Or games',
	title:  'Title',
	status:  'Status',
	creationDate:  'Created at',
	actions:  'Actions',
	create: 'Create',
	edit: 'Edit',
	save: 'Save',
	preview: 'Preview',
	close: 'Close',
	titlePlaceholder: 'Provide a title for your Either/Or',
	description: 'Description',
	descriptionPlaceholder: 'Describe your Either/Or',
	images: 'Images',
	rules: 'Rules',
	rulesPlaceholder: 'Describe your rules for participating in Either/Or',
	adContent: 'Ad content',
	adContentPlaceholder: 'Place your ad content in Either/Or',
	optionImages: 'Option images',
	main: 'Main',
	cover: 'Cover',
	mobile: 'Mobile',
	imagePlaceholder: 'Paste your image as valid URL or as relative path',
	active: 'Active',
	inactive: 'Inactive',
	statusDescription: "When Either/Or is Inactive, then users are not allowed to participate",
	winningCondition: 'Winning condition',
	winningConditionDescription: "Winning condition determines the correct choice out of a pair of options presented to the user. When is set to 'More,' the user must select the option that has a greater value to win. Conversely, if is set to 'Less,' the winning choice is the one with the lesser value",
	more: 'More',
	less: 'Less',
	time: 'Time',
	timePlaceholder: 'Enter the time limit for answering questions by users. Time is in seconds',
	lives: 'Lives',
	livesPlaceholder: 'Enter how many lives the user will have during a game',
	points: 'Points',
	pointsDescription: 'Set the threshold of consecutive correct answers after which points are awarded and define the amount of points received from this step onwards.Valid value for correct steps is between 0-50 and for score 1-100',
	pointNumber: 'Point number',
	pointsCorrectSteps: 'Correct steps',
	pointsCorrectStepsPlaceholder: 'Set the number of correct steps needed in a row to earn points',
	pointsScore: 'Score',
	pointsScorePlaceholder: 'Set the points awarded per correct answer within the streak',
	optionsDescription: 'Describe the options that users will select from during the game. Ensure to provide a minimum of 5 and a maximum of 100 options',
	optionsValue: 'Value',
	optionsValuePlaceholder: 'Type the value of the option',
	repeatedValueMessage: 'You have entered a repeated value. Please enter a different one',
	flags: 'Flags',
	flagsPlaceholder: 'Type your flag and hit enter',
	labels: 'Labels',
	customFields: 'Custom fields',
	dynamicFieldsDescription: 'You can create your custom attributes for easier way to connect or describe your Either/Or',
	keyDynamicFields: 'Key',
	valueDynamicFields: 'Value',
	options: 'Options',
	optionNumber: 'Option number',
	context: 'Context',
	content: 'Content',
	tags: 'Tags',
	entity: 'Entity',
	campaign: 'Campaign',
	tagNumber: 'Tag number',
	id: 'ID',
	idContentPlaceholder: 'Type the ID of your content',
	idCampaignPlaceholder: 'Type the ID of your campaign',
	label: 'Label',
	labelContentPlaceholder: "Type the content's label",
	labelCampaignPlaceholder: "Type the campaign's label",
	type: 'Type',
	typeDescription: 'Select the Either/Or type. You can set the types in our Management Portal by going to Features, then clicking on the Either/Or page',
	noType: "No type",
	deleteLabel: 'Delete',
	cancelLabel: 'Cancel',
	confirmationQuestionLabel: 'Are you sure you want to delete',
	typeContentPlaceholder: "Type the content's type",
	previewEitherOr: 'Preview Either/Or',
	getFootballEntitiesErrorMessage: "There was a problem with fetching football's data",
	createEitherOrMessage: 'You have successfully created Either/Or',
	createEitherOrErrorMessage: 'There was a problem creating Either/Or. Please try again',
	titleRequiredFieldValidationMessage: 'Title field is required!',
	livesFieldValidationMessage: "The value for 'lives' field is invalid. The valid one is withing the range of 1-20",
	timeFieldValidationMessage: "The value for 'time' field is invalid. The valid one is withing the range of 1-20",
	pointsFieldValidationMessage: "Points contain value where score or correct steps is an invalid one",
	optionsFieldValidationMessage: "Options must not contain any repeated IDs",
	tagsInvalidFieldValidationMessage: 'Tag entity is required!',
	getEitherOrErrorMessage: 'There was a problem with fetching Either/Or data. Please try again',
	deleteEitherOrMessage: 'You have successfully deleted Either/Or',
	deleteEitherOrErrorMessage: 'There was a problem with deleting Either/Or. Please try again',
	updateEitherOrMessage: 'You have successfully updated Either/Or',
	updateEitherOrErrorMessage: 'There was a problem updating Either/Or. Please try again',
	uploadingImageMessage: 'You have successfully uploaded image',
	generateSignedInUrlErrorMessage: 'There was a problem generating signed in URL to store the image in bucket. Please try again',
	uploadingImageErrorMessage: 'There was a problem with uploading image to bucket. Please try again',
	encryptingImageErrorMessage: 'There was a problem with encrypting image before uploading it to bucket. Please try again',
	clear: 'Clear',
	searchSportal365ImagesErrorMessage: 'There was a problem with searching images from Sportal 365 API. Please try again',
	searchImage: 'Search image',
	clearFromToFilterSportal365ImagesMessage: 'You have cleared from/to filter for Sportal365 search images',
	hideFilters: 'Hide filters',
	showFilters: 'Show filters',
	dateFromTo: 'Date from/to',
	dateFromToPlaceholder: 'Select Date...'

};

const  App = () => {
return (
<EitherOrManager
	fansUnitedApiKey={'your-api-key'}
	fansUnitedClientId={'your-client-id'}
	labels={labels}/>
);
}

Here is all information about LabelsModel:

KeyDescriptionDefault Value
userNotFoundOn login screen when client gives invalid information about email or password.User not found. Please try again
noGamesFoundWhen there are no created games for specific client, this message will appear on screen.No Either/Or games were found. You can create one by clicking the button 'Create'
signOutUsed as label on sign out button.Sign out
getEitherOrsErrorMessagereact-toastify error message when request fails for fetching list of Either/Or.There was a problem with fetching list of Either/Or games
titleLabel for titleTitle
statusStatus of a Either/OrStatus
creationDateDate of created Either/Or in same format as given for timeFormat propCreated at
actionsTwo icon buttons with different actionsActions
createLabel for management headerCreate
editLabel for management headerEdit
saveLabel for save buttonSave
previewLabel for preview buttonPreview
closeLabel for close buttonClose
titlePlaceholderPlaceholder/desciption about title input field name on management screen.Provide a title for your Either/Or
timeFormatTimeformat for displaying dates. Widgets uses dayjs as a date dependency.DD.MM.YYYY, HH:mm
previousLabel for pagination button.Previous
nextLabel for pagination button.Next
idLabel for ID read only input field.ID
descriptionLabel for desciption input field on management screen.Description
descriptionPlaceholderPlaceholder/desciption about input field for game description when creating/editing a game.Describe your Either/Or
imagesLabel for images container.Images
rulesLabel for rules rich text.Rules
rulesPlaceholderPlaceholder for rules rich text.Describe your rules for participating in Either/Or
adContentLabel for AD content rich text.Ad content
adContentPlaceholderPlaceholder for AD content rich text.Place your ad content in Either/Or
optionImagesLabel for option images container.Option images
mainLabel for main image.Main
coverLabel for cover image.Cover
mobileLabel for mobile image.Mobile
imagePlaceholderPlaceholder for image inputs.Paste your image as valid URL or as relative path
activeLabel for status.Active
inactiveLabel for status.Inactive
statusDescriptionDescription for status select.When Either/Or is Inactive, then users are not allowed to participate
winningConditionLabel for winning condition select.Winning condition
winningConditionDescriptionDescription for winning condition select.Winning condition determines the correct choice out of a pair of options presented to the user. When is set to 'More,' the user must select the option that has a greater value to win. Conversely, if is set to 'Less,' the winning choice is the one with the lesser value
moreLabel for more option.More
lessLabel for less option.Less
timeLabel for time input.Time
timePlaceholderPlaceholder for time input.Enter the time limit for answering questions by users. Time is in seconds
livesLabel for lives input.Lives
livesPlaceholderPlaceholder for lives input.Enter how many lives the user will have during a game
pointsLabel for points.Points
pointsDescriptionDescription for points.Set the threshold of consecutive correct answers after which points are awarded and define the amount of points received from this step onwards.Valid value for correct steps is between 0-50 and for score 1-100
pointNumberLabel for point container.Point number
pointsCorrectStepsLabel for points correct steps input.Correct steps
pointsCorrectStepsPlaceholderPlaceholder for point correct steps input.Set the number of correct steps needed in a row to earn points
pointsScoreLabel for points score input.Score
pointsScorePlaceholderPlaceholder for points score input.Set the points awarded per correct answer within the streak
optionsDescriptionDescription for options.Describe the options that users will select from during the game. Ensure to provide a minimum of 5 and a maximum of 100 options
optionsValueLabel for options value.Value
optionsValuePlaceholderPlaceholder for options value.Type the value of the option
flagsLabel for choosing flags.Flags
flagsPlaceholderPlaceholder on input field for flagsType your flag and hit enter
labelsLabel for labels containerLabels
customFieldsLabel for custom fields containerCustom fields
dynamicFieldsDescriptionDescription paragraph for labels and custom fields containersYou can create your custom attributes for easier way to connect or describe your Either/Or
keyDynamicFieldsLabel for key inputKey
valueDynamicFieldsLabel for value inputValue
repeatedValueMessagereact-toastify warning message when client submits same flag.You have entered a repeated value. Please enter a different one
optionsLabel for options.Options
optionNumberLabel for option container's header.Option number
correctLabel for correct radio button.Correct
contextLabel for context container.Context
contentLabel for context content container.Content
tagsLabel for context tags container.Tags
entityLabel for entity search in tag.Entity
campaignLabel for context campaign container.Campaign
tagNumberLabel for context tag container's header.Tag number
idLabel for ID.ID
idContentPlaceholderPlaceholder for ID content in context.Type the ID of your content
idCampaignPlaceholderPlaceholder for ID content in campaign.Type the ID of your campaign
labelLabel for context content/campaign label input.Label
labelContentPlaceholderPlaceholder for label content in context.Type the content's label
labelCampaignPlaceholderPlaceholder for label content in campaign.Type the campaign's label
typeLabel for context content type input.Type
typeDescriptionDescription paragraph for type select.Select the Either/Or type. You can set the types in our Management Portal by going to Features, then clicking on the Either/Or page
noTypeThe default select option for Either/Or type.No type
deleteLabelLabel for delete button in confirmation modal.Delete
cancelLabelLabel for cancel button in confirmation modal.Cancel
confirmationQuestionLabelParagraph in confirmation modal.Are you sure you want to delete
typeContentPlaceholderPlaceholder for type content in context.Type the content's type
previewEitherOrTitle in preview modal.Preview Either/Or
clearLabel tippy clear buttonClear
searchImageLabel for search image inputSearch image
hideFiltersLabel for hyperlink to hide filters for image searchHide filters
showFiltersLabel for hyperlink to show filters for image searchShow filters
dateFromToLabel for date from/to filter for image searchDate from/to
dateFromToPlaceholderPlaceholder for input date from/to filter for image searchSelect Date...
getFootballEntitiesErrorMessagereact-toastify error message when typing the name of the entity in tags and request fails.There was a problem with fetching football's data
createEitherOrMessagereact-toastify successful message when creating Either/OrYou have successfully created Either/Or
createEitherOrErrorMessagereact-toastify error message when creating Either/OrThere was a problem creating Either/Or. Please try again
titleRequiredFieldValidationMessagereact-toastify error message when validating title for Either/OrTitle field is required!
livesFieldValidationMessagereact-toastify error message when validating lives for Either/OrThe value for 'lives' field is invalid. The valid one is withing the range of 1-20
timeFieldValidationMessagereact-toastify error message when validating time for Either/OrThe value for 'time' field is invalid. The valid one is withing the range of 1-20
pointsFieldValidationMessagereact-toastify error message when validating points for Either/OrPoints contain value where score or correct steps is an invalid one
optionsFieldValidationMessagereact-toastify error message when validating options for Either/OrOptions must not contain any repeated IDs
tagsInvalidFieldValidationMessagereact-toastify error message when validating tags for Either/OrTag entity is required!
updateEitherOrMessagereact-toastify successful message when updating Either/OrYou have successfully updated Either/Or
updateEitherOrErrorMessagereact-toastify error message when updating Either/OrThere was a problem updating Either/Or. Please try again
deleteEitherOrMessagereact-toastify successful message when deleting Either/OrYou have successfully deleted Either/Or
deleteEitherOrErrorMessagereact-toastify error message when deleting Either/OrThere was a problem with deleting Either/Or. Please try again
uploadingImageMessagereact-toastify success message when uploading image to bucketYou have successfully uploaded image
generateSignedInUrlErrorMessagereact-toastify error message when trying to receive a signed in URL.There was a problem generating signed in URL to store the image in bucket. Please try again
uploadingImageErrorMessagereact-toastify error message when uploading image to bucketThere was a problem with uploading image to bucket. Please try again
encryptingImageErrorMessagereact-toastify error message when encrypting image before uploading it to bucketThere was a problem with encrypting image before uploading it to bucket. Please try again
clearFromToFilterSportal365ImagesMessagereact-toastify info message when clearing date from/to filterYou have cleared from/to filter for Sportal365 search images
searchSportal365ImagesErrorMessagereact-toastify error message when searching images from Sportal 365 APIThere was a problem with searching images from Sportal 365 API. Please try again