Have parent block’s isSelected be true if an innerblock is selected?

If you only need to know whether or not an inner-block is selected, you can leverage the core/block-editor store’s hasSelectedInnerBlock() selector. For example, if using a useSelect() hook in a functional component, that might look as such:

import { useSelect } from '@wordpress/data';

export default function Edit( { isSelected, clientId } ) {
  const is_inner_block_selected = useSelect(
    ( select ) => select( 'core/block-editor' ).hasSelectedInnerBlock( clientId )
  );

  // ...
}

After which you might use a simple isSelected || is_inner_block_selected condition to execute your specific functionality – or some other hook with with a [ isSelected, is_inner_block_selected ] dependency.

Of particular note, you can set the second argument of hasSelectedInnerBlock() to true for a deep check – that is, if you wish to know if any descendant is selected (in cases where you would like to know if the inner blocks themselves may have inner blocks which are selected):

select( 'core/block-editor' ).hasSelectedInnerBlock( clientId, true )