Skip to content

Commit

Permalink
add urlInput
Browse files Browse the repository at this point in the history
  • Loading branch information
MAX-786 committed Jun 22, 2024
1 parent 29d748b commit 41c418f
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 43 deletions.
22 changes: 3 additions & 19 deletions packages/volto-hydra/src/components/Iframe/View.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import Cookies from 'js-cookie';
import isValidUrl from '../../utils/isValidUrl';
import './styles.css';
import usePresetUrls from '../../utils/usePresetsUrls';
import UrlDropdown from '../UrlDropdown';
import UrlInput from '../UrlInput';

/**
* Get the default URL from the environment
* @returns {string} URL from the environment
Expand Down Expand Up @@ -110,27 +111,10 @@ const Iframe = () => {
}
}, [form, initialUrl]);

const handleUrlChange = (event) => {
setUrl(event.target.value);
};

return (
<div id="iframeContainer">
<div className="input-container">
<UrlDropdown urls={presetUrls} onChange={handleNavigateToUrl} />
<input
type="text"
value={url}
onChange={handleUrlChange}
placeholder="Enter URL"
className="iframe-input-field"
/>
<button
onClick={() => handleNavigateToUrl(url)}
className="iframe-input-button"
>
</button>
<UrlInput urls={presetUrls} onSelect={handleNavigateToUrl} />
</div>
<iframe id="previewIframe" title="Preview" src={src} />
</div>
Expand Down
22 changes: 0 additions & 22 deletions packages/volto-hydra/src/components/UrlDropdown/UrlDropdown.js

This file was deleted.

2 changes: 0 additions & 2 deletions packages/volto-hydra/src/components/UrlDropdown/index.js

This file was deleted.

56 changes: 56 additions & 0 deletions packages/volto-hydra/src/components/UrlInput/UrlInput.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import React, { useState, useEffect } from 'react';
import { Dropdown, Icon } from 'semantic-ui-react';
import Cookies from 'js-cookie';
import './styles.css';

const UrlInput = ({ urls, onSelect }) => {
const [searchQuery, setSearchQuery] = useState('');
const [value, setValue] = useState(Cookies.get('iframe_url') || '');
const [urlList, setUrlList] = useState(urls);
const handleDropdownChange = (e, { value, searchQuery }) => {
setValue(value);
setSearchQuery(value);
onSelect(value);
};

useEffect(() => {
setUrlList((prev) => (prev ? [...prev, ...urls] : urls));
}, [urls]);

const handleSearchChange = (e, { searchQuery }) => {
setSearchQuery(searchQuery);
};

const handleOnAddItem = (e, { value }) => {
setUrlList((prev) => (prev ? [...prev, value] : [value]));
};
const renderDropdown = () => {
const dropdownOptions = urlList.map((url) => ({
key: url,
value: url,
text: url,
}));

return (
<Dropdown
fluid
selectOnNavigation={false}
closeOnEscape
allowAdditions
options={dropdownOptions}
placeholder="Enter URL or select preset"
search
searchQuery={searchQuery}
selection
value={value}
onAddItem={handleOnAddItem}
onChange={handleDropdownChange}
onSearchChange={handleSearchChange}
/>
);
};

return <div className="url-input-container">{renderDropdown()}</div>;
};

export default UrlInput;
2 changes: 2 additions & 0 deletions packages/volto-hydra/src/components/UrlInput/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import UrlInput from './UrlInput';
export default UrlInput;
3 changes: 3 additions & 0 deletions packages/volto-hydra/src/components/UrlInput/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.url-input-container {
width: 100%;
}

0 comments on commit 41c418f

Please sign in to comment.